Was bedeutet "CRT festgestellt, dass die Anwendung geschrieben, um den Speicher nach dem Ende von heap-Puffer" bedeuten?
Ich habe ein Problem mit diesem code. Es bricht an der freien(f->izv) - Funktion und bekomme ich einen debug Fehler sagen:
CRT detected that the application wrote to memory after end of heap buffer
Ich habe keine Ahnung was das bedeutet also ich wäre für jede Hilfe dankbar 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);
}
}
Vielen Dank im Voraus
- Chancen sind, ist dies genau dort, wo der buffer overflow ist nur erkannt und nicht dort, wo es tatsächlich Auftritt. Versuchen Sie, reduzieren Sie Ihren gesamten code für ein kleines Beispiel, das sich repliziert, das Problem und poste es hier, vorausgesetzt, Sie finden nicht die erste Ausgabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen, Sie weisen einen heap-Puffer:
OK,
buffer
jetzt Punkte, um fünf chars auf dem heap.Angenommen, Sie schreiben sechs Zeichen in diesem Puffer:
Haben Sie nun verdorben heap; Sie wurden nur schreiben darf fünf chars und Sie schrieb sechs.
Das Programm ist jetzt erlaubt zu tun nichts. Es kann normal arbeiten, es kann Abstürzen, es kann senden Sie alle Ihre Passwörter zu Hackern in China, alles.
Ihre Umsetzung offenbar wählt die beste mögliche Wahl, die "darüber informieren, dass Sie einen Fehler gemacht". Sollten Sie sehr, sehr glücklich, dass dies ist, was passiert ist, anstatt in einer der schrecklichen alternativen. Leider informiert er Sie , wenn der Puffer wird freigegeben, und nicht , wenn Sie den Fehler gemacht, aber glücklich sein, dass ein Fehler überhaupt.