2017-07-19 1 views
2

So habe ich ein seltsames Problem. Wenn ich eine int deklariere, die später nicht verwendet wird, bekomme ich einen Segmentierungsfehler. Wenn ich die Deklaration entferne, läuft der Code einwandfrei. Wie kann das sein?Segmentierungsfehler mit nicht verwendeter Variable

FILE* ptr = fopen("prueba.txt", "r"); 
int x; 
char* a; 
int y = 0; //this cause the seg fault. 
do{ 
    while (fscanf(ptr, "%i", &x)!=-1){ 
     fscanf(ptr, "%s", a); 
      printf("%i %s ",x, a); 
    } 
    fseek(ptr, 0, SEEK_SET); 
}while(1); 


fclose(ptr); 
} 

Aber selbst wenn ich es verwenden, sagen mit y++; nach printf Ich bin immer noch einen Segmentierungsfehler bekommen.

+0

fscanf (ptr, "% s", a); Das sieht nach dem Problem aus. a ist nicht malloced – CIsForCookies

+2

'fscanf (ptr,"% s ", a);' überschreibt zufälligen Speicher. Indem Sie eine Variable hinzufügen, ändern Sie zufällig den zufälligen Speicher, auf den sie stampfen. – Art

+0

@Art, schade, kurze Antworten werden automatisch in Kommentare umgewandelt. Wenn Sie Ihre Antwort im Bereich "Antworten" sehen können, bleibt diese Frage für immer im Bereich "Unbeantwortet". – CDahn

Antwort

5

nach printf bekomme ich immer noch seg. Fehler.

Nun, segfault kann durch Ursache A verursacht werden und erst nach einer Weile gefangen werden.

Diese Zeile: fscanf(ptr, "%s", a) liest String in a ohne Zuordnung des Speichers zuerst -> UB.

Der UB wird nur bei printf aufgerufen. Befestigen Sie den a mit a=malloc(SOME_SIZE) oder char a[SOME_SIZE] und dies sollte weggehen

1

Sie benötigen Zeiger zu initialisieren, verkohlen, char *a, durch calloc oder malloc Funktionen. Verwenden Sie alternativ Arrays mit automatischer Speicherdauer wie char a[20];.

in Ihrem Code sind vorbei Sie nicht initialisierte Zeiger in fscanf() effektiv bedeutet, dass fscanf() zu einem undefinierten Bereich des Speichers überschrieben wird.

+1

* Verwenden Sie stack-allocated * Es wäre besser, wenn Sie die Formulierungen in "Arrays mit automatischer Speicherdauer verwenden" ändern. –

Verwandte Themen