Nicht behandelte Ausnahme bei 0x0F6F8EF7 (msvcr120d.dll) 0xC0000005: Zugriffsverletzung Lesen Lage 0x091C5B30

ich versuche zu schreiben in txt-Datei, aber nachdem das Programm schreiben fast den ganzen text, bekomme ich die nächste Fehlermeldung:

Nicht behandelte Ausnahme bei 0x0F6F8EF7 (msvcr120d.dll) 0xC0000005: Zugriffsverletzung Lesen Lage 0x091C5B30.

Spur einstellen als:

trace = fopen("trace.txt", "w");  

arr Satz wie:

int arr[18]; //(also all of the arr values initial to zero.)

for (i = 0; i < 18; i++){
    fprintf(trace, "%08x ", arr[i]);
}
  • Haben Sie versucht zu laufen ein debug-build in debugger zu fangen den Absturz in Aktion, so können Sie lokalisieren, wo genau es passiert in deinem code? Und wenn es passiert, untersuchen die beteiligten Variablen, um sicherzustellen, Sie sind alle in Ordnung? Vielleicht sollten Sie einige Zeit dauern, bis Lesen Sie über gewusst wie: Debuggen kleine Programme?
  • Meine Kristallkugel sagt mir, dass trace ist eine ungültige FILE* weil die Datei konnte nicht geöffnet werden für einige Grund. Bitte zeigen, wie trace initialisiert wird.
  • Oder gibt es möglicherweise ein problem mit arr. Was ist arr? Wie ist es deklariert? Wie wird es initialisiert?.
  • Lesen Sie auch dies: minimale reproduzierbare Beispiel.
  • arr Satz wie : int arr[18] (arr Werte initial zu null), werden die trace-Dateien *trace; trace = fopen(„trace.txt“, „w“)
  • der code, den Sie geschrieben gut aussieht. Entweder fopen zurück NULL weil die Datei nicht geöffnet werden kann, aus irgendeinem Grund, oder liegt das problem in dem Teil des Codes, die Sie nicht zeigen. fprintf auf ein NULL-Zeiger ist UB und in der Regel zu einem Absturz führt.

InformationsquelleAutor Vini | 2017-06-01



One Reply
  1. 2

    Meine Vermutung hier wäre, dass die Schleife ist die Iteration von mehr als beabsichtigt verursacht die arr[i] werden aus Ihrer festen Größe. Andere als, dass das problem möglicherweise in der trace-Initialisierung. Informationen über diese bitte!

    Dieser arbeitete für mich:

    int i;
    int mark[5] = {19, 10, 8, 17, 9};
    FILE *trace = fopen("C:\\trace.txt", "w");
    if (trace == NULL)
    {
          printf("Error opening file!\n");
    }
    for(i = 0; i <= 4; i++){
        fprintf(trace,"%d ", mark[i]);
    
    }
    fclose(trace);

    Ergebnis:

    Nicht behandelte Ausnahme bei 0x0F6F8EF7 (msvcr120d.dll) 0xC0000005: Zugriffsverletzung Lesen Lage 0x091C5B30

    Nach post Aktualisiert:
    Ordnungsgemäß Durchlaufen arr[18] deine for-Schleife sollte wie folgt Aussehen:

    for(i = 0; i <= 17; i++)

    Ist, weil, wenn Sie definieren, array mit 18 Elementen, die Sie verwenden können, die memebers von arr[0] arr[17].

    Wenn Sie einen Blick auf mein Beispiel oben, hier ist das gleiche snippet Ergebnis aber wenn du die for-Schleife wie diese:

    for(i = 0; i <= 5; i++)     

    Hinweis habe ich geändert i <= 4 zu i <= 5;

    Ergebnis:

    Nicht behandelte Ausnahme bei 0x0F6F8EF7 (msvcr120d.dll) 0xC0000005: Zugriffsverletzung Lesen Lage 0x091C5B30

    Wie Sie sehen können, sind wir Zugriff auf Elemente außerhalb der array-Grenzen, verursacht das Programm zu schreiben Müll in die Textdatei.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.