首页 > 解决方案 > 在传递给函数本身的指针上调用 realloc() 是否安全?

问题描述

注意:我对内存分配及其工作方式不是 100% 有信心,但我大部分都理解它。

当我看到realloc()被使用时,我经常看到人们使用新的指针来存储地址空间,而不是使用相同/旧的。我想知道这是否有必要。

我能做到以下几点吗?

char *string;
string = malloc(5 * sizeof(char));

...

string = realloc(string, 10 * sizeof(char));

更重要的是,这样做安全吗?

标签: cmemory-managementmallocdynamic-memory-allocationrealloc

解决方案


(1)回答你标题的问题:不,不是,因为realloc可以给你不同的指针。

(2)回答你的代码问题:两者都不是。如果realloc返回 0,意味着它不能满足你增加大小的请求,你已经失去了你的价值,string但你的旧的string还没有被释放(内存泄漏)。

广告。1:如果您可以在函数内部重新分配,那么您必须传递双指针或返回对象。

广告。2:一个例子是:

char *string, *tmp;
string = malloc(5 * sizeof(char));

...

if ((tmp = realloc(string, 10 * sizeof(char))) == 0) {
    printf("Could not allocate more memory\n);
    return;
}
else
    string= tmp;

推荐阅读