gpt4 book ai didi

c - realloc 移动内存块时如何更新其他指针?

转载 作者:IT王子 更新时间:2023-10-28 23:29:50 31 4
gpt4 key购买 nike

realloc 引用说:

The function may move the memory block to a new location, in which case the new location is returned.

是否意味着如果我这样做:

void foo() {

void* ptr = malloc( 1024 );

unsigned char* cptr = ( unsigned char* )ptr+256;

ptr = realloc( ptr, 4096 );
}

如果 realloc 移动了 block ,那么 cptr 可能会失效?

如果是,那么 realloc 是否会以任何方式发出信号,表明它将移动 block ,以便我可以做一些事情来防止 cptr 变得无效?

最佳答案

是的,cptr 将随着 realloc 移动 block 而失效!不,没有提到向您发出信号告诉您它正在移动内存块。顺便说一句,您的代码看起来很可疑...请继续阅读...请参阅我的 answer回答另一个问题并仔细阅读代码,了解它如何使用 realloc。一般的共识是,如果你这样做:

void *ptr = malloc(1024);/* later on in the code */ptr = realloc(ptr, 4096);/* BAM! if realloc failed, your precious memory is stuffed! */

解决这个问题的方法是使用临时指针并使用它,如下所示:

void *ptr = malloc(1024);/* later on in the code */void *tmp = realloc(ptr, 4096);if (tmp != null) ptr = tmp;

编辑:感谢 Secure 指出我之前输入此内容时出现的一个 gremlin。

关于c - realloc 移动内存块时如何更新其他指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172127/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com