如何修复内存访问错误

发布于 2024-07-10 07:28:49 字数 246 浏览 3 评论 0原文

我正在开展一个迁移项目,在这里我们将大量 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

悍妇囚夫 2024-07-17 07:28:49

这不一定是内存泄漏。 一块内存可能在被释放后被引用。

我的朋友曾经给我带来了一段代码,该代码在 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.

深白境迁sunset 2024-07-17 07:28:49

下面的行对我来说看起来是错误的

m_BindMap[sLabel] = b;   // 当地图大小达到此行时崩溃 
  

我假设您正在尝试在字符串末尾添加一个数字。 试试这个

stringstream ss;
ss << ":BIND" << ns;
string sLabel = ss.str();

The line below looks wrong to me

m_BindMap[sLabel] = b;   // crashes at this line at when map size

I assume you are trying to add a number to the end of the string. Try this instead

stringstream ss;
ss << ":BIND" << ns;
string sLabel = ss.str();
小草泠泠 2024-07-17 07:28:49

你用的是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.

柳若烟 2024-07-17 07:28:49

我在Solaris 上使用CC 编译器和dbx 调试器。 我知道崩溃的调用堆栈。 但这是一次异常的崩溃。

map<string,CDBBindParam,less<string> >m_BindMap;



CNumString ns(CNumStringTraits(0,2,'0'));
ns = m_BindMap.size();
string sLabel = ":BIND"+ns;
CDBBindParam b(sLabel,val);
**m_BindMap[sLabel] = b;**   // crashes at this line at when map size is more than 2
return sLabel;

I am using CC compiler on solaris and dbx debugger. I know the call stack where it is crashing. But it is abromal crash.

map<string,CDBBindParam,less<string> >m_BindMap;



CNumString ns(CNumStringTraits(0,2,'0'));
ns = m_BindMap.size();
string sLabel = ":BIND"+ns;
CDBBindParam b(sLabel,val);
**m_BindMap[sLabel] = b;**   // crashes at this line at when map size is more than 2
return sLabel;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文