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

时间:2015-06-22 09:36:36

标签: c pointers realloc

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

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

例如:

void* ptr1 = malloc(2);
void* ptr2 = malloc(2);
....
ptr1 = realloc(ptr1, 3);

在此之后,我可以保证ptr2指向realloc()电话前的相同数据吗?

4 个答案:

答案 0 :(得分:5)

是的,ptr2不受realloc()的影响,它与realloc()调用无关(根据当前代码)。

然而,FWIW,根据realloc()的{​​{3}},(强调我的)

  

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

ptr1可能会被更改。

那就是说,

 ptr1 = realloc(ptr1, 3);
风格很危险。如果realloc()失败,

  

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

  

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

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

答案 1 :(得分:3)

  

在此之后,我可以保证ptr2指向它所做的相同数据   在realloc()调用之前?

是。 realloc不会影响您执行的其他指针/内存分配。

请注意realloc的方法:

ptr = realloc(ptr, ...);
如果realloc失败,则

不安全。见Does realloc overwrite old contents?

答案 2 :(得分:0)

ptr2不受ptr1的重新分配影响。

答案 3 :(得分:0)

如果堆后面的内存可用,那么realloc会分配它。 如果没有,它就像malloc一个新尺寸的块,它会在那里记忆你的内容。