Abstürze....
-
Hab ein riesiges Problem, und ich hoffe ihr könnt mir so schnell wie möglich helfen.......
Hab eine Dialoganwendung in der ich Werte in eine Listbox eintrage, auslese und weiterverarbeite....
Dazu kann ich einen Datensatz aus einer Datei laden, einen neuen anlegen oder einen bestehenden erweitern.
Das Laden aus der Datei funktioniert wunderbar, die anderen beiuden Sachen machen aber mittlerweile Probleme. Was erst reibungslos zu klappen schien geht nun net mehr und ich weiss net mehr weiter.....
aber mal zum Code:void CRankPrintDlg::OnHinzufuegen() { CHinzufuegen m_dHinzufuegen; if (m_dHinzufuegen.DoModal() == IDOK) { CString tempPlatzhalter = ""; CString tempPlatzhalter2 = ""; CString nname = m_dHinzufuegen.m_hNachname; CString vname = m_dHinzufuegen.m_hVorname; Teilnehmer[hZaehler].SetTurner(nname,vname,m_dHinzufuegen.m_hVerein,m_dHinzufuegen.m_hWettkampfnr,m_dHinzufuegen.m_hLeistungsklasse,m_dHinzufuegen.m_hBoden,m_dHinzufuegen.m_hSprung,m_dHinzufuegen.m_hReck,m_dHinzufuegen.m_hBalkenbarren); if (Teilnehmer[hZaehler].GetPunkte()<10) tempPlatzhalter="0"; else tempPlatzhalter=""; if (Teilnehmer[hZaehler].GetRang()<10) tempPlatzhalter2="0"; else tempPlatzhalter2=""; double tempPunkte; CString tempPunkte2; int tempRang; CString tempRang2; tempPunkte=m_dHinzufuegen.m_hBoden + m_dHinzufuegen.m_hSprung + m_dHinzufuegen.m_hReck + m_dHinzufuegen.m_hBalkenbarren; tempPunkte2.Format("%.2f",tempPunkte); tempRang=Teilnehmer[hZaehler].GetRang(); tempRang2.Format("%i",tempRang); m_hListencontrol.AddString(tempPlatzhalter2 + tempRang2 + " - " + tempPlatzhalter + tempPunkte2 + " - " + nname + " " + vname); hZaehler = hZaehler + 1; UpdateData(true); } }so, das klappt net mehr, denn sobald ich den String in der listbox anklicke schmiert das Programm ab, um genau zu sein: Debug Assertion Failed! File:afx.inl Line:122
Wenn ich das richtig sehe gibts irgendwelche Probleme mit CString, aber ich hab keinen blassen Schimmer welchen....
naja, wie gesagt: sobald ich den Wert in der listbox anklicke... also hier mal der Code der box:void CRankPrintDlg::OnSelchangeTeilnehmerliste() { UpdateData(true); if (m_hAktuellerListeneintrag != "") { GetDlgItem(IDC_LOESCHEN)->EnableWindow(true); } CString tempBearbeiten; AfxExtractSubString(tempBearbeiten,m_hAktuellerListeneintrag,4,' '); AfxMessageBox(tempBearbeiten); unsigned short hilfsZaehler = 0; while (tempBearbeiten != Teilnehmer[hilfsZaehler].GetNachname()) hilfsZaehler = hilfsZaehler + 1; m_bVorname = Teilnehmer[hilfsZaehler].GetVorname(); m_bNachname = Teilnehmer[hilfsZaehler].GetNachname(); m_bVerein = Teilnehmer[hilfsZaehler].GetVerein(); m_bWettkampfnr = Teilnehmer[hilfsZaehler].GetWettkampfNr(); m_bLeistungsklasse = Teilnehmer[hilfsZaehler].GetLeistungsklasse(); m_bBoden = Teilnehmer[hilfsZaehler].GetBoden(); m_bSprung = Teilnehmer[hilfsZaehler].GetSprung(); m_bReck = Teilnehmer[hilfsZaehler].GetReck(); m_bBalkenbarren = Teilnehmer[hilfsZaehler].GetBalkenbarren(); GetDlgItem(IDC_UEBERNEHMEN)->EnableWindow(true); UpdateData(false); }das mag er also scheinbar net... um genau zu sein: die while-schleife mag er nicht, zumindest macht er keine Mucken wenn ich sie rausnehme, alles andere is ihm wurscht.......
Wobei eigentlich auch alle CStrings eindeutig sind und bisher keine Probleme gemacht haben.....
ich versteh es nunmal net, vor 1,5 Stunden klappte alles, dann wars auf einmal vorbei.... und heute muss alles zu allem Überfluss fertig werden... ist ja erst die 2 durchgemachte Nacht *grummel*
Und bitte kiene Beschwerden über das Chaos, ich weiss vieles kann man besser machen, aber ebenso könnt ich tausend Ausreden erfinden warum dem nicht so ist....
bin halt Anfänger unter Extremdruck.....
-
um mal eins klarzustellen
asserts sind eine debugHILFE-starte im debugmodus
-warte bis zum assert
-klick auf wiederholen
-öffne die aufrufliste/callstack
-klick dich nach unten durch die funktionen bis du zu einer kommst die du geschrieben hast
-schau dir an welche werte die variablen habenwenns in der while schleife is, nehm ich an, dass du über die grenze des arrays rausgehst
wie wärs mit while (tempBearbeiten != Teilnehmer[hilfsZaehler].GetNachname() && i<MAX_TEILNEHMER) hilfsZaehler++; oder gleich for(int i=0;i<MAX_TEILNEHMER;i++) if(tempBearbeiten == Teilnehmer[hilfsZaehler].GetNachname()) { //do sth break; }