我还在尝试调试一个非常偷偷摸摸的内存损坏问题.我遇到了一段代码,它在一个线程上分配内存并在另一个线程上删除它.
我有一种模糊的感觉,这是错的,但我不确定为什么.线程共享进程内存,对这些结构的访问受到互斥锁的保护,所以我认为一切都会起作用.但是,我有没有看到任何危险?
正如@monjardin的另一个回答所指出的那样,你想要做的事情本身没有任何错误.
作为一个额外的想法,你没有提到平台等,你正在遇到这个问题,但如果多线程对你和/或你正在使用的这个应用程序是新的,你想要确保标准支持您正在使用的库是库的线程安全版本.在许多环境/平台中,它们都具有开发人员可用的支持库的单线程和多线程版本.如果您正在使用线程但链接到库的单线程版本,则可能会发生许多不好的事情.例如,在malloc()和free()的单线程支持库中它不会对堆进行互斥保护(作为优化).库的多线程版本会向堆管理器添加互斥保护,以支持一次操作堆的多个线程.(这只是一个例子).