c语言如何保护全局指针,在C中,如何释放全局静态指针?

Is this free code right?

如果意图是分配10个字节的内存,那么指定指向该内存的指针,然后删除内存,那么它是正确的.

但是代码中的注释表明你有点困惑. ts.member1 = test;只会使另一个指针指向同一块数据.你没有复制任何东西.从你释放(测试)的那一刻起,test和ts.member1都指向无效的内存.

Allocated memory test pointing is in heap, right?

是.

test is in .bss?

是.

if testCode() function can be called in thread, test is one, right?

每次调用该函数时,都会创建一个新的内存块.但同样的功能也释放()内存.当然,如果另一个线程在第一个线程到达free()之前获得焦点,它将分配另一块内存.例:

>线程1:地址1234处的malloc内存

>测试指向1234

>上下文切换

>线程2:地址为5678的malloc内存

>测试指向5678

>没有任何东西指向1234 – 内存泄漏

>线程2:地址为5678的空闲内存.注意:free()不会将指针设置为NULL.

>线程2:完成

>线程1:地址为5678的空闲内存(测试仍然指向那里)

>线程1:崩溃&烧伤

所以你有内存泄漏和运行时崩溃.

So, can I use this code to avoid it?

对NULL的检查可防止第二个线程分配任何新内存.如果这是意图并且两个线程都应该访问相同的内存,那么它将防止上述错误.但实际内存也必须受到竞争条件的保护,代码变得复杂.执行此操作的正确方法可能是在本地分配所有内容,而不是通过文件范围指针.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值