2013-11-04 1 views
2

파싱 할 때 텍스트 파일의 내용을 한 번에 가져올 수있는 함수를 작성하고 있습니다.glibc가 감지되었습니다. realloc() : 다음 크기가 유효하지 않습니다. X

glibc detected *** ./mention: realloc(): invalid next size: 0x00000000010ac250 *** 

특히, SEARCH_LENGTH 40로 정의된다 : 내가 뭘 모두가 최대한 빨리 내가 ​​glibc는 오류가 다른 지역 변수에 메모리를 할당하려고 그들을 라인을 받고 인쇄이지만, 경우에 기능이 작동 그리고 (char * word)를 추가하면 오류가 발생합니다.

void testF(FILE * stream){ 
    char * line = calloc(SEARCH_LENGTH , sizeof(char)); 
    int lineScalar = 1; 

    char * word = calloc(SEARCH_LENGTH, sizeof(char)); // adding this line causes the error 

    while(fgets(line, SEARCH_LENGTH + 1, stream)!= NULL){ 

      while((*(line + (SEARCH_LENGTH*lineScalar -1)) != '\0') && (*(line + (SEARCH_LENGTH*lineScalar -1)) !='\n')){ 
       lineScalar++; 

       line = realloc(line, sizeof(char)*SEARCH_LENGTH*lineScalar); 
       assert(line); 

       fgets(line + SEARCH_LENGTH*(lineScalar - 1), SEARCH_LENGTH + 1, stream); 

      }// inner while 

      lineScalar = 1; 
      printf("Line:%s\n",line); 
     } 


     free(line); 
     free(word); 
} 

감사

답변

0

당신은 lineSEARCH_LENGTH 문자를 할당하지만 바로이 SEARCH_LENGTH+1을 읽을 OK 있다고 fgets()에게; 그렇게하면 힙이 손상되어보고있는 오류 메시지의 종류를 정확하게 얻을 수 있습니다. fgets() 블록 끝을 지나쳐 쓰지 마라!

관련 문제