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