realloc()会使所有指针无效吗?

Alp*_*der 1 c pointers realloc

注意,这个问题不是询问realloc()原始块中的指针是否无效,而是它是否使所有其他指针无效.

realloc()对它的性质有点困惑,特别是如果它移动任何其他记忆.

例如:

void* ptr1 = malloc(2);
void* ptr2 = malloc(2);
....
ptr1 = realloc(ptr1, 3);
Run Code Online (Sandbox Code Playgroud)

在此之后,我可以保证ptr2realloc()呼叫之前指向相同的数据吗?

Sou*_*osh 5

是的,ptr2不受影响realloc(),它与realloc()呼叫无关(根据当前代码).

然而,FWIW,按照该手册页realloc(),(重点煤矿)

realloc()函数返回一个指向新分配的内存的指针,该内存适用于任何类型的变量,可能与ptr不同,

ptr1 可能会改变.

那说,

 ptr1 = realloc(ptr1, 3);
Run Code Online (Sandbox Code Playgroud)

风格很危险.如果realloc()失败,

如果请求失败,realloc()函数返回....或NULL

如果realloc()失败,则原始块保持不变; 它没有被释放或移动.

但是,根据您的陈述,在失败的情况下,NULL返回将覆盖实际内存,丢失实际内存并造成内存泄漏.