我正在网上寻找一些安全管理指南 C上的内存分配/释放但是找不到一些 好消息来源。
我想也许在这个网站上堆积一个也许是个好主意。 我可以从一些开始,表明我的意思,也许有人可以 “改进”它,以便我们有一份完整的指南清单 帮助我们确保(在最大程度上)我们正确管理记忆。
示例:
声明时始终初始化指针。
int*p = NULL;
检查malloc的返回类型
int *p = malloc(sizeof(int));
if(p==NULL)
{
/* do some error handling*/
}
每个malloc
都应该有相应的free
可能的问题是两次释放内存。 怎么避免呢? 删除后将指针指定为NULL。
free(p);
p=NULL;
注意:正如评论中所指出的,如果一个对象有两个指针,这不会保护。它已经使用其中一个指针释放了。
否则,如果遵循这些指导原则,这似乎是非常安全的管理方式 记忆对我来说。
有什么想法吗?建议?
答案 0 :(得分:5)
编辑:问题已经发生了很大变化,所以这里有一个“第一”问题的样本:
在本指南中,我看到的一个问题是,如果以某种方式在
malloc
之后和自由指针被赋予一些随机垃圾内存之前 - 在这种情况下,程序员应该确保不会发生这种情况。否则free
将尝试释放垃圾记忆并可能崩溃。
只需使用const
指针!
int * const p = malloc(sizeof(int));
if(p==NULL)
{
/* do some error handling*/
}
/* do what you want with p, but you won't be able to change its value */
free(p);
您无需将p
初始化为NULL
,因为如果发生错误,malloc()
会返回NULL
。
您无需检查p
是否为空,free()
会为您检查。
答案 1 :(得分:0)
唯一的答案是纪律。确保每个malloc(3)
都有相应的free(3)
。这意味着定义一些策略(这些变量在哪里创建和初始化,它们在哪里销毁)并严格遵循它。定义负责管理每个变量的程序部分。
有一些工具可以帮助检测问题(例如,valgrind),但之后修复混乱是 hard 。