c - 在传递给函数本身的指针上调用 realloc() 是否安全?
问题描述
注意:我对内存分配及其工作方式不是 100% 有信心,但我大部分都理解它。
当我看到realloc()
被使用时,我经常看到人们使用新的指针来存储地址空间,而不是使用相同/旧的。我想知道这是否有必要。
我能做到以下几点吗?
char *string;
string = malloc(5 * sizeof(char));
...
string = realloc(string, 10 * sizeof(char));
更重要的是,这样做安全吗?
解决方案
(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;
推荐阅读
- javascript - 如何通过 node.js server-sent-event 发送命令行输出并在浏览器中显示
- java - Java 函数返回 int 而不是 Integer
- c# - 在 .Net-Core 中使用 JWT 和 OAuth 身份验证
- python - Anaconda:当我升级 Jupyter 时,当我知道存在超过 5.x 版的稳定版本时,它会给我 4.4.0 版
- model-view-controller - 没有“IEnumerable”类型的 ViewData 项
' 具有键 'Dept_IDs' - ruby - capybara save_screenshot 设置屏幕截图大小的可用选项
- sql - PL/SQL 中的动态循环
- linux - 仅从 linux 终端中的文件中获取括号内的文本
- java - 使用 iText 计算 PDF 上的附件数量
- php - mysql_query() 是否返回错误“未选择数据库”?