realloc()
-
folgender code:
int QuestionProvider::AddQuestion(char *text, char *answer) { if(questioncount==0) { questions = (QFILE_QUESTION*) calloc(sizeof(QFILE_QUESTION),++questioncount); } else { questions = (QFILE_QUESTION*) realloc(questions,sizeof(QFILE_QUESTION)*(++questioncount)); } strcpy(questions[questioncount].Answer,answer); strcpy(questions[questioncount].Text,text); return RET_SUCCESS; }
ich möchte das mit jeder weiteren frage+antwort, das feld vergrößert wird. leider bekomme ich aber einen fehler beim realloc.
Unbehandelte Ausnahme bei 0x00422a99 in AntiQuiz.exe: 0xC0000005: Zugriffsverletzung-Schreibposition 0x0000017c.was mach ich falsch? wenn ich es in der main funktion teste, funktioniert es.
danke im vor raus
-
Wenn du n Elemente reservierst und auf dieses Array mit Index n zugreifst, gibts undefiniertes Verhalten, weil dir nur die Indizes 0 bis n-1 zustehen.
-
Was spricht gegen std::vector und std::string?
-
ich weiss nicht was gegen std::vektor spricht, aber es muss doch trotzdem eine lösung für mein problem geben. ich tue auch nicht undefiniert auf das array zugreifen. der fehler kommt erst beim freigeben des speichers.
-
for me and you schrieb:
ich tue auch nicht undefiniert auf das array zugreifen.
Doch, tust du.
der fehler kommt erst beim freigeben des speichers.
Die Folgen eines Fehlers zeigen sich nicht zwangsläufig gleich dort, wo der Fehler steckt.
-
achso...
wie konnte mir das nur passieren :p
naja ich werde es nacher testendaaaaaaaaaaanke
-
Hi!
Schreib statt questioncount einfach questioncount+1 in realloc, dann hast du weiter unten auch keinen Zugriffsfehler. Oder erhöhe es und greife unten mit questioncount-1 darauf zu. Du kannst wie bereits gesagt bei n Elementen auf den Index 0...n-1 zugreifen.
Code-Hacker