c - 如何正确重新分配?

标签 c memory-management realloc


我写了一个小函数来返回一个由程序输入组成的字符串,它工作得很好,直到我用恒定大小换取动态内存分配。
在我用一些 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 = '\0';

    return line - ptr_pos;
}


感谢您的帮助。

最佳答案

当您调用realloc时,您必须为其提供已分配内存的起始地址,该地址与malloc最初返回的地址相同。 免费也是如此。

但是您正在修改line的值,因此当调用realloc时它不再指向 block 的开头。

这是未定义的行为,因此肯定有可能出现段错误。

关于c - 如何正确重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118048/

相关文章:

C:使用 fgets() 将字符串存储在动态缓冲区中时调用 realloc() 后的奇怪行为

c - 逐行读取标准输入

c++ - 类数组正在破坏数据

c++ - 在 C++11 中对数组进行简单范围管理的最干净的方法是什么

multithreading - delphi中的类属性线程安全吗?

c - Valgrind 不喜欢我的 realloc()?

c - 将指针传递给指针并重新分配空间

c - #ifdef 在#define 里面?

c - 以下函数被调用了多少次?

c - 初学者C指针问题