Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
valgrind:尝试调试C+;时堆块lo/hi大小不匹配+;在Docker容器中运行的程序 当我调试C++二进制时,我遇到了以下问题: valgrind: m_mallocfree.c:307 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed. valgrind: Heap block lo/hi size mismatch: lo = 1, hi = 4294967295. This is probably caused by your program erroneously writing past the end of a heap block and corrupting heap metadata. If you fix any invalid writes reported by Memcheck, this assertion failure will probably go away. Please try that before reporting this as a bug. host stacktrace: ==1747== at 0x58013284: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x58013397: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x58013531: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x5801BD6D: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x5800CDC1: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580614A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580737A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580738DC: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580C9561: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580C96AA: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580720CD: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0xDEADBEEFDEADBEEE: ??? ==1747== by 0xDEADBEEFDEADBEEE: ??? ==1747== by 0xDEADBEEFDEADBEEE: ??? sched status: running_tid=47 Thread 47: status = VgTs_Runnable (lwpid 1861) ==1747== at 0x4C2922D: free (vg_replace_malloc.c:540) ==1747== by 0x9A7CB7B: __libc_freeres (in /usr/lib64/libc-2.17.so) ==1747== by 0x4A24739: _vgnU_freeres (vg_preloaded.c:77) client stack range: ??????? client SP: 0x289569C8 valgrind stack range: [0x1009516000 0x1009615FFF] top usage: 5064 of 1048576_C++_Docker_Valgrind - Fatal编程技术网

valgrind:尝试调试C+;时堆块lo/hi大小不匹配+;在Docker容器中运行的程序 当我调试C++二进制时,我遇到了以下问题: valgrind: m_mallocfree.c:307 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed. valgrind: Heap block lo/hi size mismatch: lo = 1, hi = 4294967295. This is probably caused by your program erroneously writing past the end of a heap block and corrupting heap metadata. If you fix any invalid writes reported by Memcheck, this assertion failure will probably go away. Please try that before reporting this as a bug. host stacktrace: ==1747== at 0x58013284: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x58013397: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x58013531: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x5801BD6D: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x5800CDC1: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580614A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580737A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580738DC: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580C9561: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580C96AA: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580720CD: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0xDEADBEEFDEADBEEE: ??? ==1747== by 0xDEADBEEFDEADBEEE: ??? ==1747== by 0xDEADBEEFDEADBEEE: ??? sched status: running_tid=47 Thread 47: status = VgTs_Runnable (lwpid 1861) ==1747== at 0x4C2922D: free (vg_replace_malloc.c:540) ==1747== by 0x9A7CB7B: __libc_freeres (in /usr/lib64/libc-2.17.so) ==1747== by 0x4A24739: _vgnU_freeres (vg_preloaded.c:77) client stack range: ??????? client SP: 0x289569C8 valgrind stack range: [0x1009516000 0x1009615FFF] top usage: 5064 of 1048576

valgrind:尝试调试C+;时堆块lo/hi大小不匹配+;在Docker容器中运行的程序 当我调试C++二进制时,我遇到了以下问题: valgrind: m_mallocfree.c:307 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed. valgrind: Heap block lo/hi size mismatch: lo = 1, hi = 4294967295. This is probably caused by your program erroneously writing past the end of a heap block and corrupting heap metadata. If you fix any invalid writes reported by Memcheck, this assertion failure will probably go away. Please try that before reporting this as a bug. host stacktrace: ==1747== at 0x58013284: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x58013397: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x58013531: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x5801BD6D: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x5800CDC1: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580614A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580737A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580738DC: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580C9561: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580C96AA: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0x580720CD: ??? (in /usr/lib64/valgrind/massif-amd64-linux) ==1747== by 0xDEADBEEFDEADBEEE: ??? ==1747== by 0xDEADBEEFDEADBEEE: ??? ==1747== by 0xDEADBEEFDEADBEEE: ??? sched status: running_tid=47 Thread 47: status = VgTs_Runnable (lwpid 1861) ==1747== at 0x4C2922D: free (vg_replace_malloc.c:540) ==1747== by 0x9A7CB7B: __libc_freeres (in /usr/lib64/libc-2.17.so) ==1747== by 0x4A24739: _vgnU_freeres (vg_preloaded.c:77) client stack range: ??????? client SP: 0x289569C8 valgrind stack range: [0x1009516000 0x1009615FFF] top usage: 5064 of 1048576,c++,docker,valgrind,C++,Docker,Valgrind,但有趣的是,当相同的二进制文件在容器外(在VM上)运行时,它工作得非常好。如果我的源二进制文件有一个内存链接(根据Valgrind常见问题),我很困惑,为什么我没有在容器中运行时没有遇到这个问题 谢谢你的帮助 很可能是这个问题: 我在一个基于centos:7的Docker容器中遇到了这个问题,并且还可以使用--tool=memcheck复制它。将--run libc freeres=no添加到valgrind调用中为我解决了这个问题。您可能有一些未定义的行为(缓冲区溢出?可能),因此程序在不同的

但有趣的是,当相同的二进制文件在容器外(在VM上)运行时,它工作得非常好。如果我的源二进制文件有一个内存链接(根据Valgrind常见问题),我很困惑,为什么我没有在容器中运行时没有遇到这个问题


谢谢你的帮助

很可能是这个问题:


我在一个基于
centos:7
的Docker容器中遇到了这个问题,并且还可以使用
--tool=memcheck
复制它。将
--run libc freeres=no
添加到valgrind调用中为我解决了这个问题。

您可能有一些未定义的行为(缓冲区溢出?可能),因此程序在不同的平台上显示不同的行为。。。不管怎样,这只是一个猜测,没有提供实际的代码。你解决了吗?