有人在我的程序中报告了一个错误,它会显示以下错误消息:
该程序的C ++ DLL中出现错误,该错误由VS2008编译。我可以重现错误,但我无法找出问题所在。我已经针对内存泄漏或错误的分配进行了大量测试,但没有成功。
现在奇怪的是:当我向代码添加一个main函数时,将它编译为EXE然后运行完全相同的东西,一切都好。该错误仅作为DLL出现。 接下来奇怪的是,当我按下“忽略”时,程序会继续并按预期完成其工作。
所以,我正在寻找两种类型的答案: - 帮助我找到错误的答案 - 答案,帮助我“自动忽略”或隐藏此错误消息,以便它不会出现。那没关系,因为结果没有区别。
我感谢任何帮助或建议。
谢谢!
更新
就像Joachim Pileborg所说,我已经创建了一个简单的测试c ++项目,它调用了我的DLL,它完美地工作!通常调用DLL的程序是用DELPHI编写的,所以我认为它可能是DELPHI的一个bug ...很奇怪:DLL的调用适用于99.9999 ..%,但在一个特定情况下,会出现错误IN Dll。这不是失败的电话......真的,真的很奇怪的故事:S
答案 0 :(得分:1)
好的......这是一个负数。更简单的事情......也许你的代码正在做一个带有无效\负大小的malloc?
奇怪的是二进制数是11111111111111111111111111111100,可能你的大小计算错了。然而,它可能是一个更复杂的错误,例如由于缓冲区溢出。
您根本不应忽略此错误,可能是更复杂和危险错误的症状。 尝试调试您的分配,尝试准确获取执行此无效分配的代码段。
您可以重载new运算符或重新定义malloc,将其替换为调试函数,您可以在其中检查传递的参数(大小)。
答案 1 :(得分:1)
4294967292 - 即(unsigned)-4
。你要么做一些计算错误的大小,一些整数已经溢出或者某些。
我会尝试在malloc
(或任何分配函数)上设置一个断点,并检查坏值的来源。
答案 2 :(得分:0)
通过调试器,我能够看到调用堆栈,代码中的哪个函数显示错误。搜索完这个例程后,我可以找到如何禁用它的显示。