如果--leak-check设置正确,则对于其余每个块, Memcheck确定是否可以通过指针中的指针访问该块 根集.根集由(a)的通用寄存器组成 所有线程,以及(b)初始化,对齐,指针大小的数据字 可访问的客户端内存,包括堆栈. If --leak-check is set appropriately, for each remaining block, Memcheck determines if the block is reachable from pointers within the root-set. The root-set consists of (a) general purpose registers of all threads, and (b) initialized, aligned, pointer-sized data words in accessible client memory, including stacks.据我了解,由于仍然从main()函数的堆栈中指向绝对丢失"的内存,因此应该将它们归类为仍可访问",对吗?For what I understand, since the "definitely lost" memory are still pointed to from the main() function's stack, they should be categorized as "still reachable", right?如果没有,我如何配置Valgrind尝试从main的堆栈访问内存块,以确定它们是否仍可访问"?If not, how can I configure Valgrind to try to reach memory blocks from main's stack, to determine if they are "still reachable"?请不要告诉我free在main末尾的指针,这不是我要问的.对于Valgrind术语上的仍然可以到达"和绝对丢失"之间的区别,请参见以下答案: https://stackoverflow.com/a /3857638/578749Please don't tell me to free the pointers at the end of main, that is not what I am asking about. For the distinction between "still reachable" and "definitely lost" on Valgrind terms, see this answer: https://stackoverflow.com/a/3857638/578749推荐答案当main的堆栈被破坏(即返回)时,您的内存肯定会丢失.因此,解决方案是不返回.Your memory is definitely lost when the stack of main is destroyed, that is, when it returns. Thus, the solution is not to return.#include <stdlib.h>int main(){ /* your code here */ exit(0);}返回0或exit(0)的行为或主函数应等效.The behavior or main returning 0 or exit(0) should be equivalent.现在的输出是:==5035== Memcheck, a memory error detector==5035== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.==5035== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info==5035== Command: ./a.out==5035====5035====5035== HEAP SUMMARY:==5035== in use at exit: 3,000 bytes in 3 blocks==5035== total heap usage: 3 allocs, 0 frees, 3,000 bytes allocated==5035====5035== LEAK SUMMARY:==5035== definitely lost: 0 bytes in 0 blocks==5035== indirectly lost: 0 bytes in 0 blocks==5035== possibly lost: 0 bytes in 0 blocks==5035== still reachable: 3,000 bytes in 3 blocks==5035== suppressed: 0 bytes in 0 blocks==5035== Reachable blocks (those to which a pointer was found) are not shown.==5035== To see them, rerun with: --leak-check=full --show-leak-kinds=all==5035====5035== For counts of detected and suppressed errors, rerun with: -v==5035== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 这篇关于为什么valgrind报告我的记忆为“绝对丢失"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
06-03 17:33