2012-10-12 2 views
0

을 감지 내 코드입니다 :이 오류 메시지는 다음오류가 glibc는 여기

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

main(int argc, char *argv[]) 
{ 
    struct numbers_struct { 
     char numbers_array[1000]; 
    }; 
    char Line[300]; 
    FILE *Fp; 
    int i=0; 
    long size; 
    Fp=fopen("input2.txt","r"); 
    fscanf(Fp, "%ld", &size); 
    struct numbers_struct *numbers = malloc(sizeof(struct numbers_struct) * size); 
    while(!feof(Fp)) 
    { 
     if (fgets(Line,1000,Fp)!=NULL) 
     { 
      strncpy(numbers[i].numbers_array,Line,1000); 
      i++; 
     } 
    } 
    int k; 
    k=i; 
    for(i=k-1;i>=0;i--) 
    printf("%s",numbers[i].numbers_array); 
    free(numbers); 
    fclose(Fp); 

    return 0; 
} 

나는 그것을 실행, 프로그램 인쇄 올바른 출력 :

*** glibc detected *** ./part2: double free or corruption (out): 0x08834170 *** 
part2: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed. 
Aborted (core dumped) 

내가 무슨 일을 했는가?

답변

0

내가 뭘 잘못 했니?

귀하는 corrupted heap입니다.

힙 손상을 진단하는 가장 좋은 방법은 ValgrindAddressSanitizer입니다. 이 중 하나는 문제를 직접 지적해야합니다.

프로그램에서이 명백한 버그가 있습니다

  • fgets(Line,1000,Fp) - 얼마나 큰 Line, 그리고 긴 줄되게 경우에 당신이 그것으로 얼마나 많은 문자를 읽고?
  • struct numbers_struct *numbers = malloc(sizeof(struct numbers_struct) * size); - 입력 파일이 3으로 시작하지만 15 개의 행을 포함하면 어떻게됩니까?