gpt4 book ai didi

c++ - 当没有提供足够的数据时,如何在 valgrind 中检测 "possibly lost"字节?

转载 作者:行者123 更新时间:2023-11-30 03:56:19 24 4
gpt4 key购买 nike

我已经在我的 1500 行代码中挖掘了几天,以找到那 15 个字节(可能丢失)但无济于事。即使我运行了以下命令,valgrind 也没有提供足够的数据:

valgrind --leak-check=full --show-reachable=yes --track-origins=yes --show-below-main=yes ./myapp

我得到以下报告 block :

==3283== 15 bytes in 1 blocks are possibly lost in loss record 1 of 4
==3283== at 0x402842F: operator new(unsigned int) (vg_replace_malloc.c:255)
==3283== by 0x40D2A83: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==3283== by 0x40D4CF7: char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==3283== by 0x40D4E65: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==3283== by 0x804DB22: _GLOBAL__sub_I__ZN7processC2Ei7in_addr (main.cpp:1304)
==3283== by 0x8050131: __libc_csu_init (in /home/username/myapp-write/src/myapp)
==3283== by 0x41A60A9: __libc_start_main (libc-start.c:185)
==3283== by 0x80499C0: ??? (in /home/username/myapp-write/src/myapp)
==3283==

谁能告诉我如何检测故障线路?

最佳答案

如果您的代码调用的替代终止策略不是由于阻碍展开语义而设计用于正确清理自动变量,则不会调用您的自动变量析构函数。

std::terminate ,正如您在评论中提到的那样,不幸的是,您遇到了这样一种情况。终止处理程序的默认操作是调用 std::abort ,它不会对自动、线程本地或静态存储持续时间对象触发清理破坏,并且任何采用动态内存管理的此类变量都会像筛子一样泄漏。

除非您有非常充分的理由,否则请避免以这种方式终止契约(Contract),而且通常很少很好的理由。

祝你好运。

关于c++ - 当没有提供足够的数据时,如何在 valgrind 中检测 "possibly lost"字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28555988/

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