Jay*_*esh 4 c realloc language-lawyer
我使用此参考读了C中的动态内存分配.
那个文件Say's:
realloc()只应用于动态分配的内存.如果未动态分配内存,则行为未定义.
如果我们使用realloc()这样的东西:
int main()
{
int *ptr;
int *ptr_new = (int *)realloc(ptr, sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据该引用,该程序未定义,因为指针ptr未动态分配.
但是,如果我使用类似的东西:
int main()
{
int *ptr = NULL;
int *ptr_new = (int *)realloc(ptr, sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据该参考,它是否也是未定义的行为?
我的第二种情况不会调用未定义的行为.我对吗?
Sto*_*ica 10
第一种情况有未定义的行为,第二种情况没有.在第一种情况下,值ptr是不确定的.因此,将该值传递给realloc任何函数,本身是不确定的.
另一方面,由于realloc在传递空指针值(它就像调用malloc)1时具有明确定义的行为,因此第二段代码是完全合法的(除了事实上你没有free任何东西).
1 7.22.3.5 realloc函数/ p3
如果ptr是空指针,则realloc函数的行为类似于指定大小的malloc函数.