2010-12-11 113 views
3

嗨我不知道是否有任何现成的函数,我可以调用打印所有的malloc数据结构,以便我可以看到哪个内存分配给哪个变量?有没有可以打印出malloc数据结构的命令?

我有这个内存损坏,当我释放一个变量它抱怨,但我不知道哪个变量是相邻的。

谢谢!

回答

0

我觉得这很难找出你描述它的方式,因为内存中没有任何东西指向拥有变量。

你可以理论上遍历应用程序创建的所有对象的整个树,直到找到指向导致问题的点旁边的内存的指针为止。

您可以使用像gdb这样的工具来转储您的分配内存块并自行查看。也许你会通过查看这些数据来识别数据,这会让你看到导致问题的代码。

最好的办法是使用电篱笆这样的工具,当你的代码试图破坏内存时,它会立即杀死你的应用程序。

3

尝试在valgrind下运行您的程序。如果你幸运的话,它会指出你在违规的越界内存写入。 (如果你运气不好,你会只得到有关代码虚假投诉的洪水深的C库)。

+0

[Electric Fence](http://en.wikipedia.org/wiki/Electric_Fence)和[Dmalloc](http://en.wikipedia.org/wiki/Dmalloc)是您可以尝试的其他工具。 – 2010-12-27 15:29:17

0

我们的CheckPointer工具可能会找到您损坏内存的确切位置。

大多数内存检查工具在数据周围都有一些“围栏”来检测访问不良。这种围栏的尺寸比被围栏的物体要细得多。如果您访问对象外部但围栏内部,则不会检测到错误。例如,Valgrind没有关于堆栈帧的线索,因此它无法检测到对超出范围并被另一个范围覆盖的堆栈帧的访问。 CheckPointer 可以

CheckPointer跟踪每个存储块(堆,堆栈,部分结构)和每个访问的确切分配。它确切地知道你何时超出为存储实体预留的确切空间(例如,如果你到达嵌入在结构中间的数组的末尾)。因此它可以提供更好的检查。

CheckPointer还将提供所有仍然分配的存储的执行后转储;当然,您可以在代码中的任意位置调用该转储过程作为调试帮助。

相关问题