Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有空指针的realloc_C_Realloc_Null Pointer - Fatal编程技术网

使用带有空指针的realloc

使用带有空指针的realloc,c,realloc,null-pointer,C,Realloc,Null Pointer,这在c语言中有效吗 int func() { static int *p = NULL; p = realloc(p, 20); return 0; } 我想在递归中使用它,因此每次调用func函数时,如果已经分配了内存,它将被重新分配,如果没有(第一次调用),它

这在c语言中有效吗

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);