Abstürze durch überwachte listbox?

Hilfesuchender

Grünschnabel
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:
C/C++ 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);
}
}
C/C++ 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);
}
}
C/C++ 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:
C/C++ Code:
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);

}
C/C++ Code:
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);

}
C/C++ Code:
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.....
 
Also, ich bin ja gerne bereit zu helfen, aber ich habe keine Lust, mich durch mehrere Seiten unformatierten Code durchzuwühlen. Ich schlage vor, dass du deinen Code mit Code-Tags leserlich machst.
Wenn du deinen Code aufbereitet hast, sehe ihr ihn mir gerne mal an.
 
Also das größte Chaos ist dein Posting selbst !
Du schreibst hier 3mal den selben Code rein und das auch noch unformatiert ohne Code Tags.
Nehmt ihr euch mal die 1-5 Minuten Zeit um einen Post nochmal durchzulesen?
NEIN! Und dann beschwert man sich, wenn man nicht gleich sofort Hilfe bekommt.

Ok nun zu deinem Problem, ich habe mir deinen Code nicht genau angeschaut (bin ja nicht verrückt), aber ich hab ihn etwas Überflogen und tippe mal auf folgendes:
Code:
void CRankPrintDlg::OnSelchangeTeilnehmerliste() 
{ 
   UpdateData(true); 
   if (m_hAktuellerListeneintrag != "") { 
      GetDlgItem(IDC_LOESCHEN)->EnableWindow(true); 
   } 

   CString tempBearbeiten; 
   AfxExtractSubString(tempBearbeiten,m_hAktuellerListeneintrag,4,' ');
...
...
}
Du greifst hier per Index bzw. Länge auf m_hAktuellerListeneintrag zu, es ist aber möglich, daß dieser String leer ist, bzw. zu kurz ist. Dies führt dann zu einem Assert.

Es kann sein, daß ich mich irre.
Evtl wäre natürlich noch eine Möglichkeit da, daß Programm mal zu Debuggen, damit kannst du den Fehler besser finden.

Gruß Homer
 

Neue Beiträge

Zurück