2016-05-22 10 views
-3

Ich versuche, Speicher zu reservieren, indem ich malloc zu meinem int-Zeiger verwende. Ich bekomme einen Segmentierungsfehler und wenn ich versuche, es mit gdb zu debuggen, bekomme ich diese Ausgabe:Segmentierungsfehler für einfache Speicherzuweisung

Programm empfangenes Signal SIGSEGV, Segmentierungsfehler. 0x00007ffff7a97f90 in __GI___libc_realloc (oldmem = 0x7fffffffdfd0, Bytes = 1) bei malloc.c: 3015 3015 malloc.c: Keine solche Datei oder Verzeichnis.

-Code ist wie folgt:

int stringAllocation(char **destination){ 
    char c=1, *temp; 
    int ctr=0; 
    int num_of_char=0; 

    while(c!='\n'){ 
     c=getc(stdin); 
     num_of_char+=1; 

     temp=realloc(*destination, sizeof(char)*num_of_char); 
      if(temp) 
       *destination=temp; 
      else{ 
       printf("String allocation failure."); 
       return -1; 
      } 

    *(*destination+ctr)=c; 
    ctr++; 
    } 

    if((*destination)[ctr-1]=='\n') 
     (*destination)[ctr-1]='\0'; 
} 
main(void){ 

char *temp_course; 
int temp_sem; 
int temp_acad_year; 
int valid=0; 
char dummy; 
int ctr; 

while(valid==0){ 
    dummy=0; 
    while(dummy!='\n') 
     dummy=getc(stdin); 

    printf("\nGetting course!\n"); 

    printf("\nCourse code: "); 
    stringAllocation(&temp_course); 

    printf("Semester: "); 
    scanf("%d", &temp_sem); 
     if(temp_sem<1||temp_sem>3){ 
      valid=0; 
      continue; 
     } 
     else 
      valid=1; 

     printf("Academic year: "); 
     scanf("%d", &temp_acad_year); 
     if(temp_acad_year<1908||temp_acad_year>2015){ 
      valid=0; 
      continue; 
     } 
     else 
     valid=1     
} 

int numstud; 
int *studnum; 

valid=0; 
while(valid==0){ 
    printf("Input number of students: "); 

    scanf("%d", &numstud); 

    if(numstud>=5&&numstud<=15) 
     valid=1; 
} 

studnum=(int*)calloc(numstud,sizeof(int)); 
}    
} 
+2

"Sie wollen Code mit dem?" –

+0

Danke, dass Sie uns wissen lassen. Jetzt sag bitte was du von uns willst? Sie haben keinen Code veröffentlicht, daher können Sie keine Hilfe erwarten. –

+0

Es ist wie der Versuch, das Geheimnis von GOTT zu lösen, ohne Ihn zu sehen oder Ihm zu begegnen. :} – Haris

Antwort

0

temp_course nicht initialisiert wurde. Wenn der vorhandene Wert für die Neuzuweisung verwendet wird, stürzt der Code ab. Initialisiere es auf NULL.