【发布时间】:2020-11-25 12:28:28
【问题描述】:
我正在尝试使用 realloc 函数重新分配内存,我看到您之前需要使用 malloc,但我不明白您是否必须使用它,因为假设我正在创建以下字符串:
char string[] = "fun";
如果我尝试添加更多空间,realloc 函数会起作用吗?
这让我想到了我的问题,我试图简单地在字符串的末尾添加一个字母,让我们说“p”,但由于某种原因,程序每次运行时都会在 realloc 行上崩溃。
这是我的完整代码:
int main()
{
char string[] = "fun" ;
str_func(string);
printf("%s", string);
return 0;
}
void str_func(char* str)
{
str = (char*)realloc(str, strlen(str) + 2);
strcat(str, "p");
}
我还尝试创建一个指向“字符串”的指针并发送该指针,结果相同。
【问题讨论】:
-
不,您只能通过
realloc()获得来自malloc()或calloc()(或来自以下realloc())或NULL的东西。 -
所以你必须使用 malloc() 之前?
-
realloc(NULL, 42)是可以的,这种情况之前不需要使用malloc()。 -
是的。不要混合使用堆栈分配的数组(普通数组)和堆分配的数组(
malloc和realloc)。 -
这能回答你的问题吗? C: Expanding an array with malloc