gpt4 book ai didi

c - 如果新 block 大小小于初始 block 大小,我应该强制执行 realloc 检查吗?

转载 作者:太空狗 更新时间:2023-10-29 17:06:31 26 4
gpt4 key购买 nike

在这种情况下 realloc 会失败吗?

int *a = NULL;

a = calloc(100, sizeof(*a));
printf("1.ptr: %d\n", a);

a = realloc(a, 50 * sizeof(*a));
printf("2.ptr: %d\n", a);

if(a == NULL){
printf("Is it possible?\n");
}

return (0);

我的输出是:

1.ptr: 4072560
2.ptr: 4072560

所以 'a' 指向同一个地址。那么我应该强制执行 realloc 检查吗?

稍后编辑:

  • 在 Windows XP 下使用 MinGW 编译器。
  • 行为与 Linux 上的 gcc 相似吗?

稍后编辑 2:这样检查可以吗?

int *a = NULL, *b = NULL;

a = calloc(100, sizeof(*a));
b = realloc(a, 50 * sizeof(*a));

if(b == NULL){
return a;
}
a = b;
return a;

最佳答案

是的,您应该始终对 realloc 或与此相关的任何其他内存分配进行检查。

当前重复使用同一地址的行为是不应依赖的实现细节。这样做只会在库切换其实现或您移动到新平台时为错误打开大门。

这有可能永远失败吗?可能不是,如果你能找到一个这样的案例,我会感到惊讶。然而,这并不意味着它不会。将 realloc 包装在一个自动检查每个操作的函数中非常简单,没有理由不这样做。

void* xrealloc(void* ptr, size_t size) {
ptr = realloc(ptr, size);
if ( !ptr ) {
exit(EXIT_FAILURE);
}
return ptr;
}

关于c - 如果新 block 大小小于初始 block 大小,我应该强制执行 realloc 检查吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2541215/

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