gpt4 book ai didi

c - 正确使用 realloc()

转载 作者:行者123 更新时间:2023-12-02 07:28:52 27 4
gpt4 key购买 nike

来自 man realloc:realloc() 函数返回一个指向新分配的内存的指针,该指针适合任何类型的变量,可能与 ptr 不同,如果请求失败,则返回 NULL .

因此在此代码片段中:

ptr = (int *) malloc(sizeof(int));
ptr1 = (int *) realloc(ptr, count * sizeof(int));
if(ptr1 == NULL){ //reallocated pointer ptr1
printf("Exiting!!\n");
free(ptr);
exit(0);
}else{
free(ptr); //to deallocate the previous memory block pointed by ptr so as not to leave orphaned blocks of memory when ptr=ptr1 executes and ptr moves on to another block
ptr = ptr1; //deallocation using free has been done assuming that ptr and ptr1 do not point to the same address
}

仅仅假设重新分配的指针指向不同的内存块而不是同一个 block 是否就足够了。因为如果假设变为假并且realloc返回ptr指向的原始内存块的地址然后free (ptr) 执行(由于注释中给出的原因),那么内存块将被删除,程序将变得疯狂。我是否应该添加另一个条件来比较 ptr 和 ptr1 的相等性并排除 free(ptr) 语句的执行?

最佳答案

只是不要在快乐路径中的原始 ptr 上调用 free() 。本质上,realloc() 已经为您完成了这项工作。

ptr = malloc(sizeof(int));
ptr1 = realloc(ptr, count * sizeof(int));
if (ptr1 == NULL) // reallocated pointer ptr1
{
printf("\nExiting!!");
free(ptr);
exit(0);
}
else
{
ptr = ptr1; // the reallocation succeeded, we can overwrite our original pointer now
}

关于c - 正确使用 realloc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006707/

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