注意:我对内存分配及其工作方式没有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;