使用带有空指针的realloc
这在c语言中有效吗使用带有空指针的realloc,c,realloc,null-pointer,C,Realloc,Null Pointer,这在c语言中有效吗 int func() { static int *p = NULL; p = realloc(p, 20); return 0; } 我想在递归中使用它,因此每次调用func函数时,如果已经分配了内存,它将被重新分配,如果没有(第一次调用),它
int func()
{
static int *p = NULL;
p = realloc(p, 20);
return 0;
}
我想在递归中使用它,因此每次调用func
函数时,如果已经分配了内存,它将被重新分配,如果没有(第一次调用),它将被分配。对于第一个参数使用realloc()
和NULL
是合法的,并且realloc(NULL,size)
相当于malloc(size)
,但您的代码是非法的,因为它使用的是未初始化的非静态局部变量p
,该值是不确定的
引用7.22.3.5中的realloc功能:
#包括
void*realloc(void*ptr,size\u t size);
3如果ptr是空指针,realloc函数的行为与指定大小的malloc函数类似
p
不是空指针--它未初始化。我想你想要静态int*p代码>您描述的内容有效,但您的代码与您描述的内容不匹配,因为您根本没有初始化p
。您应该更改int*p代码>到静态int*p代码>让它做你想做的事static
使变量在多次调用func
之间保留,并默认初始化为零。我宁愿将指针作为参数向下传递到递归调用,而不是static。这将使函数变得纯粹且可重入。别忘了释放它。好的,我现在确实修复了代码
#include <stdlib.h>
void *realloc(void *ptr, size_t size);