我正在编写一个函数,用于在不知道行的大小的情况下一次获取文本文件的一行内容进行解析。如果我正在做的就是获取行并打印它们,该函数有效,但是当我尝试将内存分配给另一个局部变量时,我得到了glibc错误:
glibc detected *** ./mention: realloc(): invalid next size: 0x00000000010ac250 ***
具体来说,SEARCH_LENGTH被定义为40并且添加(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 :(得分:0)
您在SEARCH_LENGTH
中分配了line
个字符,但随后立即告诉fgets()
可以阅读SEARCH_LENGTH+1
;如果它这样做,它将破坏堆,为您提供您正在看到的那种错误消息。不要让fgets()
写出你的块的末尾!