关于多线程里面new分配内存的问题!

dragonfly 2001-03-06 07:19:00
我现在遇到一个问题,需要各位老大的帮助:

再写一个多线程的程序时,我在线程里面调用new分配一块内存,退出以前delete,线在编译没有问题,运行也没有问题。但是调试的时候,我发现debug windowt提示说线程得堆栈在某储被修改了,但是我仔细检查了代码,没有发现有可能修改线程堆栈的地方,所以一直查不出来,究竟是怎么回事?
然后,装上boundcheck检查,boundcheck提示错误出在线程里面的new 运算符的那里,为什么会出现这样的事情?在线程里面动态分配内存还需要特别注意什么问题吗?
真是奇怪!!!!
...全文
445 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzh 2001-03-08
  • 打赏
  • 举报
回复
你在new时调用catch捕获一下,看有没有错误,如果有的话,再根据具体原因检查
In355Hz 2001-03-08
  • 打赏
  • 举报
回复
_beginthread(ex)与CreateThread的主要不同是对C标准库函数的支持不同,在CreateThread中使用C标准库函数是不安全的(据M$的说法,如果CreateThread线程创建失败,使用C标准库函数会导致少量内存泄漏,但总而言之,不够安全)
Win32中C++算符new/delete实际上是通过在进程全局堆中分配实现的,如果为安全性考虑,可以用HeapCreate创建局部堆,然后通过HeapAlloc/HeapFree分配,这样如果有某些错误的话(如数组越界)不至于影响到全局堆中的数据。
我个人觉得的用AfxBeginThread()对C++的语法支持较好,而且它内部调用的是_beginthreadex, 可是他返回的是CWinThread对象的指针,可能对你不太适用。
piaoyun 2001-03-08
  • 打赏
  • 举报
回复
关注
dragonfly 2001-03-08
  • 打赏
  • 举报
回复
to lujianjian(老农)&xyzboat(一叶小舟)
两位兄台说得也是,但是作为一个程序来讲,稳定性应该是最重要的,虽然目前程序是可以运行了,但是难以保证不会出现其他的问题。再说,我担当的这部分目前是作为通用部分来使用,其他人在此基础上开发,所以,一定需要一个稳定的根基!!

to yangzi(笨笨) 
堆栈分配?由于程序量比较大现在修改起来已经是不可能的了!
所以,还得必须搞清楚究竟是怎么回事。

在boundcheck里面,说是建议用_beginthread代替CreateThread,可能问题就在这里!
据我所知,前者里面有调用后者,也就是说在_beginthread里面,做了其他一些相应的工作!可能想在缺少的东西就在这里!
由于_beginthread与Createthread的参数list和返回值不一样,所以现在修改是不太现实的了,所以,现在还是把它该正确为好!!!!

xyzboat 2001-03-07
  • 打赏
  • 举报
回复
别管了,你也管不了的.
没听说往堆new一块儿内存还要注意那么多,既然你的程序正常(确保压力测试通过喽),那就一切OK了。
nononono 2001-03-07
  • 打赏
  • 举报
回复
这个帖子怎么回事?目录中的标题不是这个。
lujianjian 2001-03-06
  • 打赏
  • 举报
回复
兄弟,运行时没问题你还担心什么?
调试的时候你说可能是真正的多线程吗?别浪费时间了。
yangzi 2001-03-06
  • 打赏
  • 举报
回复
我也遇到类似的问题,莫名其妙。
后来改成从堆栈分配就没问题了。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧