我似乎无法弄清楚这一点。我的程序编译并运行成功,但在调试期间仅在关闭程序时弹出一个消息框,显示“无效的指针操作”。我煞费苦心地检查了所有 FormCloseQuery 和 FormDestory 事件是否有任何语法或逻辑错误。我发现没有,它们按预期执行,没有任何错误。
当我告诉编译器在无效指针操作错误时中断时,它不会执行任何操作,只是挂起程序。此时,我必须终止或终止该进程。
你如何解决这个问题?
提前致谢,
最佳答案
当内存管理器尝试释放无效内存时,会引发无效指针异常。可以通过三种方式实现此目的。
最常见的是因为您试图释放已经释放的对象。如果您打开 FastMM 的 FullDebugMode,它会检测到这一点并直接指出问题所在。 (但请确保构建一个映射文件,以便它包含创建有用的堆栈跟踪所需的信息。)
第二种方法是如果您尝试释放分配给内存管理器以外的地方的内存。当将字符串从 Delphi EXE 传递到未使用共享内存管理器功能的 Delphi DLL 时,我已经见过几次这种情况。
第三种方法涉及直接搞乱指针,可能不适用于您。如果您尝试 FreeMem
或 Dispose
一个不引用 FastMM 分配的实际内存块的错误指针,您将收到此错误。
这很可能是第一个。使用FullDebugMode,您将轻松找到问题的根源。
关于delphi - 无效的指针操作 - Delphi XE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113097/