gpt4 book ai didi

c++ - 应用程序退出时出现 SegFault

转载 作者:行者123 更新时间:2023-12-03 12:50:15 28 4
gpt4 key购买 nike

我在工作中使用的应用程序之一遇到了一个奇怪且烦人的问题。该应用程序是用 C++ 编写的,当应用程序终止(主函数返回或调用 exit)时,它会因段错误而崩溃。段错误似乎是由 basic_string 类析构函数中的双重释放指针引起的。我无法添加源代码,但我可以说该应用程序非常简单,并且我没有直接在代码中使用任何指针。该应用程序只是从库中调用函数。

Valgrid 发现以下问题:

==5402== Invalid read of size 4
==5402== at 0x549F05F: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() (atomicity.h:49)
==5402== by 0x41D1BA4: ??? (in ../Functions.so)
==5402== by 0x436D873: ??? (in ../Functions.so)
==5402== by 0x967674: _dl_fini (in /lib/ld-2.12.so)
==5402== by 0x9A7EAE: exit (in /lib/libc-2.12.so)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402== Address 0x55ec808 is 8 bytes inside a block of size 15 free'd
==5402== at 0x4007895: operator delete(void*) (vg_replace_malloc.c:480)
==5402== by 0x549EF67: std::string::_Rep::_M_destroy(std::allocator<char> const&) (new_allocator.h:110)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402==
==5402== Invalid free() / delete / delete[] / realloc()
==5402== at 0x4007895: operator delete(void*) (vg_replace_malloc.c:480)
==5402== by 0x549EF67: std::string::_Rep::_M_destroy(std::allocator<char> const&) (new_allocator.h:110)
==5402== by 0x41D1BA4: ??? (in ..../Functions.so)
==5402== by 0x436D873: ??? (in .../Functions.so)
==5402== by 0x967674: _dl_fini (in /lib/ld-2.12.so)
==5402== by 0x9A7EAE: exit (in /lib/libc-2.12.so)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402== Address 0x55ec800 is 0 bytes inside a block of size 15 free'd
==5402== at 0x4007895: operator delete(void*) (vg_replace_malloc.c:480)
==5402== by 0x549EF67: std::string::_Rep::_M_destroy(std::allocator<char> const&) (new_allocator.h:110)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402==

该应用程序链接到共享库和静态库。 Function.so 是一个共享库,可能包含一些静态代码。此问题与链接阶段有关,因为根据库链接到我的可执行文件的顺序,应用程序可能不会崩溃。

我真的很努力解决这个问题,你知道这个问题的根本原因是什么吗?有什么建议如何继续调查这个问题吗?

最佳答案

此问题的根本原因是代码中某处的错误。 bug 可以是任何东西。野指针取消引用、超出数组末尾或任何其他无数种错误。 C++ 代码中的错误并不一定意味着应用程序会立即崩溃。应用程序可以继续执行,但稍后当它尝试访问由于错误而损坏的内存时会崩溃。

您的代码中存在一个错误,可能会导致内存损坏,从而在应用程序终止时触发此崩溃。您需要找到它并修复它。欢迎使用 C++。

关于c++ - 应用程序退出时出现 SegFault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38787869/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com