如何修复内存访问错误
我正在开展一个迁移项目,在这里我们将大量 C++ 库从大型机迁移到 Solaris。 我们已成功完成迁移,但在运行应用程序时,某些地方会因“信号 SEGV(故障地址处没有映射)”而崩溃。
由于该应用程序也支持 Windows,因此我们在 Windows 上检查了 purify。 应用程序中没有内存泄漏,并且在 Windows 上运行良好。
任何人都可以建议,可能造成此类错误的其他原因是什么。 有任何工具可以跟踪此类错误吗?
I am working on a migration project, here we are migrating large set of C++ libraries from Mainframe to Solaris. We have complted migration sucessfully, but while running the application, some places it crashes with 'signal SEGV (no mapping at the fault address)'.
Since the application supports on windows also, we checked with purify on windows. There are no memory leaks in the application and it works fine on windows.
Can any one suggests, what could be the other reasons which may create this type of errors. Any tools for tracing this type of errors?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这不一定是内存泄漏。 一块内存可能在被释放后被引用。
我的朋友曾经给我带来了一段代码,该代码在 Windows 上运行良好,但在 Linux 上却给出了 segv。 事实证明,有时在 Windows 上释放内存后它仍然有效(可能是很短的一段时间),但在 Linux 上立即触发 segv。
It's not necessarily a memory leak. It could be that a piece of memory is referenced after it is free'ed.
My friend once came to me with a piece of code that runs fine on Windows but gives segv on Linux. It turned out that sometimes the memory is still valid after you free'ed it on Windows (probably for a short period of time) but immediately triggered segv on Linux.
下面的行对我来说看起来是错误的
我假设您正在尝试在字符串末尾添加一个数字。 试试这个
The line below looks wrong to me
I assume you are trying to add a number to the end of the string. Try this instead
你用的是g++吗? 如果是这样,请使用“-g”标志重新编译。 在 gdb 中运行该程序。 当它崩溃时,输入“bt”(用于回溯),这应该会告诉您问题出在哪里。
Are you using g++? If so, recompile with the "-g" flag. Run the program in gdb. When it crashes type "bt" (for backtrace) and that should tell you where your problem is.
我在Solaris 上使用CC 编译器和dbx 调试器。 我知道崩溃的调用堆栈。 但这是一次异常的崩溃。
I am using CC compiler on solaris and dbx debugger. I know the call stack where it is crashing. But it is abromal crash.