我现在在工作中的一个相当大的C++应用程序中突然出现了一个非常奇怪的错误(在CPU和RAM使用以及代码长度方面很大-超过100,000行)。这是在双核SunSolaris10机器上运行的。该程序订阅股票价格提要并将它们显示在用户配置的“页面”上(页面是用户定制的窗口结构——该程序允许用户配置此类页面)。在其中一个底层库变成多线程之前,这个程序过去一直没有问题。受此影响的程序部分已相应更改。关于我的问题。大约每执行三次程序就会在启动时出现段错误。这不一定是一个硬性规定——有时它会连续崩溃3次,然后连续工作5次。有趣的是段错误(阅读:痛苦)。它可能以多种方式表现出来,但最常见的情况是函数A
我正在C++(VisualStudio2015)中的大型应用程序上调试“访问冲突”异常。该应用程序是由多个库构建的,问题发生在其中一个(SystemC)上,尽管我怀疑问题的根源在别处。我看到的是一个函数调用,它破坏了调用者的成员函数的地址。m_update_phase=true;m_prim_channel_registry->perform_update();m_update_phase=false;inlinevoidsc_prim_channel_registry::perform_update(){for(inti=m_update_last;i>=0;--i){m_updat
最近我一直在深入研究C++,我的错误似乎变得复杂了。我有一个对象vector,每个对象都包含一个floatvector。我决定我需要创建一个进一步的平面数组,其中包含一个所有对象的所有浮点值。它比那复杂一点,但问题的要点是,当我遍历我的对象以提取浮点值时,在某些时候我的对象vector被更改,或者以某种奇怪的方式损坏。(我的读操作都是const函数)另一个例子是MPI。我刚刚开始,所以我只想在两个不同的节点上运行完全相同的代码,它们有自己的内存并且没有发生数据传输,一切都非常简单。令我惊讶的是,我遇到了段错误,经过几个小时的跟踪,我发现一个变量的一次赋值将一个完全不同的变量设置为NUL
我是C++的新手(从C#迁移过来),所以我不太确定这里发生了什么。我想做的是从文件中读取图像并将其写入输出文件,但每当我这样做时,文件的某些部分似乎已损坏。我检查了内存中的数据,它确实匹配,所以我相信罪魁祸首一定是fwrite()发生了什么,尽管它总是可能只是我做错了什么。这是一些示例数据:http://pastebin.com/x0eZin6K还有我的代码://usedtofigureoutifreadinginonegiantswoophastodowithcorruptionintBlockSize=0x200;//Readthefiledataunsignedchar*data
编辑:我在评论者的帮助下弄明白了。回答我标题中提出的问题:不,这不是堆栈损坏,它的gdb报告了错误的值。该程序实际上按预期运行并且具有正确的this指针。促使我发布此问题的实际错误行为可能与我在此处描述的问题完全无关。首先是一个警告。我相信这是一个内存损坏问题,除了“彻底检查你的代码”之外,我通常不会期望得到答案,但我已经看到这种行为反复出现,希望你们中的一些人对这个问题有洞察力以及我是如何做的可以找到它的来源。我目前正在实现区间静态分析,它跟踪C程序中变量的可能范围。我的基区间类的复制构造函数如下所示:itvt::itvt(constitvt&i):_i(i.type==INTBV?
我正在使用CoreData开发iOS应用程序。我从用户那里得到了应用程序数据,其中包括以下隐藏文件。文档/.appname.sqlite.migrationdestination_xxxx(549MB)文档/.appname.sqlite.migrationdestination_xxxx-shm(721KB)Documents/.appname.sqlite.migrationdestination_xxxx-wal(0Byte)并且在同一个Documents文件夹中有appname.sqlite,appname.sqlite-wal和appname.sqlite-shm。appna
我在AndroidNDK环境中遇到'ABORTING:HEAPMEMORYCORRUPTION'问题。如果我使用ndk-gdb回溯,它主要发生在libc.so中的malloc/dlfree函数上经过长时间的跟踪问题,它主要发生在sqlite3_xxx函数调用中,这在iOSenv上绝对可以正常工作。我只是找不到我必须深入的地方。有没有人遇到过类似的问题并解决了? 最佳答案 我看到了内存问题,但没有看到您报告的'ABORTING:HEAPMEMORYCORRUPTION'。您必须找出哪个堆已损坏:Java堆还是C/C++堆。或者它可能是
编辑:由于对我的示例的评论是正确的,我将其删除并将其变成一个通用问题:在我的项目中,有时我会遇到堆栈损坏的情况。无论我多么努力地编写代码来避免它,有时它就是不可避免的。但是当它发生时,有什么方法可以对抗它?我在这个博客里找到了好心人给的一个宏:http://rxwen.blogspot.com/2009/04/detect-stack-corruption.html它读取ebp寄存器值以检测损坏。但肯定会有更复杂的工具来帮助避免搬起石头砸自己的脚。我在Windows中使用Codeblocks和gcc编译器进行编程。我提出这个问题的原因是找到我可以在我的编程环境下使用的工具来帮助我检测这
我已经有一段时间没有使用任何C++了,但我决定完成我为某人所做的一个大项目。不过,我现在收到以下错误消息...检测到堆损坏:在0x17DEB940处的正常block(#1761)之后。CRT检测到应用程序在堆缓冲区结束后写入内存。我一直在逐步执行我认为可能导致它的所有功能,但我不知所措。有什么方法可以使用更高级的调试功能来解决这个问题吗? 最佳答案 这听起来确实像是典型的内存损坏错误。该平台将是有用的信息。在没有看到您的代码及其复杂性的情况下,有两种可能性:我会猜测运行时库将允许您添加对堆验证代码直接来自你的代码。我建议放置调用堆验
我正在尝试用C++编写一个程序,以尽可能最快的方式处理大量数据包。来自标准的所有数据包都应尽可能快地读取,从池中发送到一个线程进行处理,然后处理到将数据包写入标准输出的输出线程。当您在C++中使用标准输入和输出时,建议在任何输入或输出之前调用std::ios_base::sync_with_stdio(false)功能。在某些环境中,这实现了很大的加速,但您应该避免在调用后使用标准C函数进行输入/输出。好吧,这似乎在单线程中工作得很好。但正如我所说,我的意图是使用一个线程用于输入,一个用于输出,多个线程用于并行处理。我观察到输出存在一些问题。这是输出线程(非常简化):voidPacke