Vc++ new delete 线程非安全性

VC++ 6.0是目前我最喜欢的编译器之一。已有六年的使用历史,本以为已经相当熟悉了,可今天让我难过,之前不知道写了多少的new,delete都没有问题,同样的电脑,同样的操作系统,还是以前的VC6.0开发环境,今晚却让我苦逼了一晚上。
情景:有两个线程,一个线程用来读取文件(new 内存块),另一个线程用来处理读取的文件内容(有delete 内存块)。首先,删除的每一个内存块都是线程1合法new的,没有重复删除情况。单步跟踪正常,打日志跟踪正常,但是程序全速跑一段时间,立刻报内存块不能为读,或是不能为写,或是删除的内存地址不合法,甚是怪异。
开始时,根本不怀疑是 new /delete引起的问题,还以为其它哪个地方有问题呢,因为在学生时代都在书本上见过,而且在一起论坛上也有见过说 new/delete是线程安全的,而且自己用了这多年也从没遇到过什么问题,所以根本不怀疑。但是经过近两个小时的排查之后,终于让我确信是new/delete的问题,在重载了new/delete(线程安全版本)之后 ,程序跑起来了,经过反复测试一点错也没有,再换回之前代码,又是报错,oK,问题锁定了,解决了。
疑问,为什么我之前在多线程环境下的new/delete就没有问题呢,而今天这么不过200行的代码却是问题不断 ?!但直觉告诉我,这绝非偶然!!唉,时间不早了,待以后研究吧
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值