【发布时间】:2013-03-21 21:10:22
【问题描述】:
在启动时,我的应用程序将在大约 %50 的时间内崩溃,并在以下代码行出现分段错误:
float** temp = new float*[map_size];
map_size 的值为 513。
调试模式下永远不会出现这种错误。该应用程序现在相当大,有 10,000 行代码,并且有多个线程在运行,所以我怀疑发布任何其他代码是否有用。 (我不知道该发什么)
由于这行代码相当简单,我猜我的错误在其他地方。我最好的猜测是,我的程序在其他地方超出了分配的内存,然后当我偶尔尝试分配更多内存时,它会发生冲突并导致错误。这是一种可能的情况吗?
什么样的行为会导致内存分配出现分段错误?以及如何缩小代码中发生这种情况的范围?
【问题讨论】:
-
map_size的期望值是多少? -
有数百种可能发生的“场景”,您真的希望我们列出所有这些吗?你试过什么了?使用任何一种可用的调试器?
-
如果您运行 Mac 或 Linux,valgrind 工具可能对您有用。它会检测到这种内存错误并告诉你有问题的代码行在哪里。
-
如果你绝对肯定是那一行导致了崩溃,唯一的问题可能是
map_size。 -
map_size 绝对不是问题。如果我用预期值“513”替换它。崩溃仍然发生。
标签: c++ memory-management segmentation-fault