你好,
我使用RCM6700和动态C 10.72。

虽然我的程序没有使用任何动态分配,但我有以下运行时错误。

运行时错误:检测到堆使用错误
文件:MALLOC。自由
命令功能:mspace_free
电话:3313

我的程序使用根和xmem存储,我怀疑某些代码行正在更新根内存,而我打算更新xmem,反之亦然。

当我得到运行时错误时,DC崩溃了,我不能回去找出我的程序是如何到达那里的。我如何调试这种情况以确定错误的代码行?

谢谢,
马西莫

这些事情总是很难追踪,因为违规代码可能早在调用mspace_free()之前就已经完成了它的工作。

您可以尝试在malloc中启用调试。并在mspace_free()中的错误检测代码上设置断点。可以查看发生错误的内存块,以确定损坏来自何处。

DC 10.72(以及早期的DC 10版本)的一个帮助是对远指针和远数据的支持,这使得在内存的不同区域分配变量变得更容易,而不必在xmem和根之间手动移动数据。除非您试图通过显式地将数据放在根内存中来减少代码大小或加快某些操作,否则大多数情况下您不必考虑它。

您可以考虑定义USAGE_ERROR_ACTION宏,以便在发生内存错误时调用您自己的一些代码来执行一些事后转储等操作。

问候,
彼得

1像