【问题标题】:using realloc with a NULL pointer [duplicate]使用带有 NULL 指针的 realloc [重复]
【发布时间】:2021-08-04 19:03:42
【问题描述】:

这在 c 中有效吗?

int  func()
{                                                               
        static int *p = NULL;
        p = realloc(p, 20);                             
        return 0;
}

我想在递归中使用它,所以每次调用 func 函数时,如果已经分配了内存,它将被重新分配,如果没有(第一次调用)它将被分配。

【问题讨论】:

  • p 不是空指针——它是未初始化的。我想你想要static int*p;
  • 您描述的内容有效,但您的代码确实与您描述的内容匹配,因为您根本没有初始化p。跨度>
  • 您应该将 int *p; 更改为 static int *p; 以让它做您想做的事情。 static 使变量在多次调用func 之间保持不变,默认初始化为零。
  • 我宁愿将指针作为参数向下传递给递归调用,而不是静态的。这将使函数纯粹且可重入。不要忘记释放它。
  • 好的,我现在确实修复了代码

标签: c realloc null-pointer


【解决方案1】:

使用realloc()NULL作为第一个参数是合法的,realloc(NULL, size)等价于malloc(size),但是你的代码是非法的,因为它使用了一个未初始化的非静态局部变量p,这是不确定的。

引用N1570 7.22.3.5 realloc 函数:

#include <stdlib.h>
void *realloc(void *ptr, size_t size);

3 如果 ptr 是空指针,则 realloc 函数的行为类似于指定大小的 malloc 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2018-04-23
    • 2016-05-29
    • 2017-04-07
    • 1970-01-01
    • 2020-03-21
    • 2019-09-19
    相关资源
    最近更新 更多