如何正确重新分配?

How to realloc properly?


我为 return 一个由给定程序的输入组成的字符串编写了一个小函数,它工作正常,直到我用恒定大小换取动态内存分配。
在我用一些 printf() 测试之后看起来程序在调用 realloc() 时崩溃了。
我是在使用 realloc() 做错了什么,还是其他原因?

char* get_line()
{
    size_t ptr_pos = 0, size = 50;
    int c;
    char* line = malloc(size * sizeof *line);
    char* temp;

    while((c = getchar()) != EOF)
    {
        if(++ptr_pos >= size)
        {
            size += 50;
            temp = realloc(line, size * sizeof *line); // The program crashes on this intruction.

            if(temp != NULL)
            {
                line = temp;
                printf("Reallocation success.\n");
            }
            else
            {
                printf("Reallocation error.\n");
                free(line);
                exit(1);
            }
        }

        *line++ = c;
        if(c == '\n')
            break;
    }
    if(ptr_pos == 0)
        return NULL;
    *line = '[=10=]';

    return line - ptr_pos;
}


感谢您的帮助。

当你调用realloc时,你必须给它分配内存的起始地址,与malloc最初返回的地址相同。 free.

也是如此

但是你修改了line的值,所以调用realloc时它不再指向块的开头。

那是未定义的行为,因此绝对有可能出现段错误。