怎么避免两个指向同一个地址的多次释放问题
本帖最后由 wallwind 于 2014-03-05 20:44:48 编辑
比如以下代码
#include
#include
int main()
{
int *ptr = malloc(10*sizeof(int));
int *ptr2 = ptr;
if(ptr)
{
free(ptr);
ptr =NULL;
printf("delete one");
}
if(ptr2)
{
free(ptr2);
ptr2=NULL;
printf("delete two");
}
return 0;
}
以上代码肯定有问题。。。这种怎么避免?
------解决方案--------------------
没有百分百避免这类问题的方法,越安全的东西自由度越小,绝对安全的东西根本不需要程序员
尽可能遵守谁申请谁释放的原则,或者使用智能指针不进行手动释放,可以在一定程度上减少这类问题出现的几率
------解决方案--------------------
静态分析工具splint对LZ程序(假设其文件名为two_pointers.c)报以下信息:
E:\two_pointers.c(16,6):
Variable ptr2 used after being released
E:\two_pointers.c(11,11): Stor