注意,这个问题不是询问realloc()
是否使原始块中的指针无效,而是会使所有其他指针无效。
我对realloc()
的性质感到有点困惑,特别是如果它移动任何其他记忆。
例如:
void* ptr1 = malloc(2);
void* ptr2 = malloc(2);
....
ptr1 = realloc(ptr1, 3);
在此之后,我可以保证ptr2
指向realloc()
电话前的相同数据吗?
答案 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
失败,则
答案 2 :(得分:0)
ptr2
不受ptr1
的重新分配影响。
答案 3 :(得分:0)
如果堆后面的内存可用,那么realloc会分配它。 如果没有,它就像malloc一个新尺寸的块,它会在那里记忆你的内容。