在传递给函数本身的指针上调用 realloc() 是否安全?
Is it safe to call realloc() on the pointer you pass into function itself?
注意:我对内存分配及其工作原理不是 100% 有信心,但我大部分都理解它。
当我看到 realloc()
被使用时,我经常看到人们使用新的指针来存储地址 space 而不是使用 same/old 。我想知道是否有必要。
我能做到以下几点吗?
char *string;
string = malloc(5 * sizeof(char));
...
string = realloc(string, 10 * sizeof(char));
更重要的是,这样做安全吗?
(1) 回答你标题的问题:不,不是,因为realloc
可以给你一个不同的指针。
(2) 回答你代码的问题:都不是。如果 realloc
returns 0,意味着它不能满足你增加大小的请求,你已经失去了 string
的价值,但你的旧 string
还没有被释放(内存泄漏)。
广告。 1:如果你可以在函数内部重新分配,那么你必须传递双指针或 return object.
广告。 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;
注意:我对内存分配及其工作原理不是 100% 有信心,但我大部分都理解它。
当我看到 realloc()
被使用时,我经常看到人们使用新的指针来存储地址 space 而不是使用 same/old 。我想知道是否有必要。
我能做到以下几点吗?
char *string;
string = malloc(5 * sizeof(char));
...
string = realloc(string, 10 * sizeof(char));
更重要的是,这样做安全吗?
(1) 回答你标题的问题:不,不是,因为realloc
可以给你一个不同的指针。
(2) 回答你代码的问题:都不是。如果 realloc
returns 0,意味着它不能满足你增加大小的请求,你已经失去了 string
的价值,但你的旧 string
还没有被释放(内存泄漏)。
广告。 1:如果你可以在函数内部重新分配,那么你必须传递双指针或 return object.
广告。 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;