Ich habe Probleme mit diesem Code. Es bricht bei der Funktion free(q->izv) ab und ich erhalte einen Debug-Fehler, der besagt:
CRT detected that the application wrote to memory after end of heap buffer
Ich habe keine Ahnung, was das bedeutet, also wäre ich dankbar für jede Hilfe, die ich bekomme.
typedef struct izvodjaci{
char *izv;
int broj;
struct izvodjaci *sled;
}IZV;
obrisi_i(IZV *p){
while (p){
IZV *q;
q = p;
p = p->sled;
if (!strcmp(q->izv,"UNKNOWN")) free(q->izv);
free(q);
}
}
Danke im Voraus
Was bedeutet „CRT hat festgestellt, dass die Anwendung nach dem Ende des Heap-Puffers in den Speicher geschrieben hat“?
Angenommen, Sie weisen einen Heap-Puffer zu:
char* buffer = malloc(5);
OK, buffer
zeigt jetzt auf fünf Zeichen auf dem Haufen.
Angenommen, Sie schreiben sechs Zeichen in diesen Puffer:
buffer[0] = 'a';
buffer[1] = 'b';
buffer[2] = 'c';
buffer[3] = 'd';
buffer[4] = 'e';
buffer[5] = '\0';
Sie haben jetzt den Haufen verdorben; du durftest nur fünf zeichen schreiben und hast sechs geschrieben.
Das Programm darf es jetzt tun irgendetwas. Es kann normal funktionieren, es kann abstürzen, es kann alle Ihre Passwörter an Hacker in China senden, irgendetwas.
Ihre Implementierung wählt anscheinend die bestmögliche Option aus, nämlich “Sie darüber informieren, dass Sie einen Fehler gemacht haben”. Du solltest sein sehr sehr glücklich dass dies passiert ist, anstatt einer der schrecklichen Alternativen. Leider informiert es Sie wenn der Puffer freigegeben wirdund nicht als du den Fehler gemacht hastaber sei froh, dass du überhaupt einen Fehler bekommen hast.
Es besteht die Möglichkeit, dass der Pufferüberlauf nur dort erkannt wird und nicht dort, wo er tatsächlich auftritt. Versuchen Sie, Ihren gesamten Code auf ein kleines Beispiel zu reduzieren, das das Problem repliziert, und posten Sie es hier, vorausgesetzt, Sie finden das Problem nicht zuerst.
– ev
4. Juni 2014 um 14:14 Uhr