c-对传递到函数本身的指针调用realloc()安全吗



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

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

我能做以下事情吗?

char *string;
string = malloc(5 * sizeof(char));
...
string = realloc(string, 10 * sizeof(char));

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

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

(2( 要回答您的代码问题:两者都不是。如果realloc返回0,这意味着它不能满足您增加大小的请求,那么您已经丢失了string的值,但您的旧string尚未释放(内存泄漏(。

Ad。1:如果你可以在函数内部重新定位,那么你必须传递一个双指针或返回对象。

Ad。2:一个例子是:

char *string, *tmp;
string = malloc(5 * sizeof(char));
...
if ((tmp = realloc(string, 10 * sizeof(char))) == 0) {
printf("Could not allocate more memoryn);
return;
}
else
string= tmp;

最新更新