我有一个问题debugging我的代码,有点困惑的gdb输出。 我已经附加在下面的gdb输出。 最后2行,第13行和第14行是我的代码,但其他所有内容都来自C ++库。 我感到困惑的是,从第7行左右开始,似乎是在调用delete。 这是初始化代码,在代码stream中没有被删除或释放。 但是有些东西会导致在C ++库中的某个地方调用delete。
这是在g ++ 4.7.2的debian框中
有人有线索可以帮助我吗?
编辑:谢谢你们的帮助。 我确实认为这里还有别的事情要做。 因为我的代码的意图是使用几个append()调用来构造一个string,所以我在这个string的ctor中添加了一个对reserve()的调用,所以它将足够大以处理几个append()调用而不必更多的空间。 这显然是有帮助的,因为我现在很难强迫这次事故。 但我确实同意这个原因可能是我的代码中的其他地方。 再次感谢您的帮助。
如何为Linux开发设置头文件和库
linux交叉编译和dynamic库/链接
什么是OSX上的Windows QueryPerformanceCounter的等价物?
更好的通知在托盘中
CMake发布步骤:根据visual studioconfiguration复制多个文件
Program received signal SIGABRT,Aborted. 0xb7fe1424 in __kernel_vsyscall () (gdb) bt #0 0xb7fe1424 in __kernel_vsyscall () #1 0xb7a9a941 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #2 0xb7a9dd72 in *__GI_abort () at abort.c:92 #3 0xb7ad6e15 in __libc_message (do_abort=2,fmt=0xb7baee70 "*** glibc detected *** %s: %s: 0x%s ***n") at ../sysdeps/unix/sysv/linux/libc_fatal.c:189 #4 0xb7ae0f01 in malloc_printerr (action=<optimized out>,str=0x6 <Address 0x6 out of bounds>,ptr=0xb71117f0) at malloc.c:6283 #5 0xb7ae2768 in _int_free (av=<optimized out>,p=<optimized out>) at malloc.c:4795 #6 0xb7ae581d in *__GI___libc_free (mem=0xb71117f0) at malloc.c:3738 #7 0xb7f244bf in operator delete(void*) () from /usr/lib/i386-linux-gnu/libstdc++.so.6 #8 0xb7f8b48b in std::string::_Rep::_M_destroy(std::allocator<char> const&) () from /usr/lib/i386-linux-gnu/libstdc++.so.6 #9 0xb7f8b4d0 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6 #10 0xb7f8c7a0 in std::string::reserve(unsigned int) () from /usr/lib/i386-linux-gnu/libstdc++.so.6 #11 0xb7f8caaa in std::string::append(char const*,unsigned int) () from /usr/lib/i386-linux-gnu/libstdc++.so.6 #12 0xb7f8cb76 in std::string::append(char const*) () from /usr/lib/i386-linux-gnu/libstdc++.so.6 #13 0x0804fa38 in MethodRequest::MethodRequest (this=0x80977a0) at cLogProxy.cpp:26 #14 0x0804fac0 in DebugMethodRequest::DebugMethodRequest (this=0x80977a0,
谢谢,
-Andres
如何在Windows应用程序商店中写入txt文件?
Windows进程和它连接到的IP地址
在接受连接之前或之后分叉?
堆与C中的进程相关吗?
你正在调用std::string::append ,最终导致delete被调用。 如果我们通过std::string::append涉及的步骤,可能更有意义的是为什么delete被调用。
假设你有:
std::string s("abc"); s.append("def");
当你创建s ,内存必须被分配来保存"abc" 。 在s.append("def"); ,必须有足够的内存与s关联以保存"abcdef" 。 步骤到达:
得到s => 3的长度。
获取输入字符串"def" => 3的长度。
添加它们来确定新字符串的长度。 => 6 。
分配内存来保存新的字符串。
将"abc"复制到新分配的内存中。
追加"def"到新分配的内存。
将新分配的内存与s关联起来。
有些东西在做字符串计算,导致内部删除。 似乎有可能是别的东西捣毁记忆。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。