C语言两个指针指向同一个,如何避免两个指向同一个地址的多次释放有关问题...

怎么避免两个指向同一个地址的多次释放问题

本帖最后由 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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值