【问题标题】:glibc detected, realloc(): invalid next size:X [duplicate]检测到 glibc,realloc():下一个大小无效:X [重复]
【发布时间】:2013-11-04 03:29:47
【问题描述】:

我正在编写一个函数,该函数一次获取文本文件的一行内容以进行解析,而不知道行的大​​小。如果我所做的只是获取行并打印它们,该函数就可以工作,但是一旦我尝试将内存分配给另一个局部变量,我就会得到 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);
}

谢谢

【问题讨论】:

    标签: c glibc realloc


    【解决方案1】:

    你在line中分配了SEARCH_LENGTH字符,但随后立即告诉fgets()可以读取SEARCH_LENGTH+1;如果这样做,它将破坏堆,从而准确地为您提供您所看到的错误消息。不要让fgets() 写到块的末尾!

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2014-06-28
      • 2012-02-02
      • 2011-06-26
      • 2011-02-25
      • 2012-10-31
      相关资源
      最近更新 更多