我最近一直在自学NCurses,因此决定在valgrind中测试我的代码以检查是否有内存泄漏。少量的代码会产生与我的程序相同的错误结果,我想知道是否有人知道它有什么问题或可以将我引向答案。
#include <ncurses.h>
int main()
{
initscr();
WINDOW *win = newwin(0,0,10,10);
delwin(win);
endwin();
return 0;
}
== 20986 == Memcheck,一个内存错误检测器
== 20986 ==版权所有(C)2002-2013,以及Julian Seward等人的GNU GPL。
== 20986 ==使用Valgrind-3.10.1和LibVEX;使用-h重新运行以获取版权信息
== 20986 ==命令:./ a.out
== 20986 ==
== 20986 ==
== 20986 ==堆摘要:
== 20986 ==在出口处使用:193个块中的281,089字节
== 20986 ==堆总使用量:248个分配,55个释放,353,425个字节分配
== 20986 ==
== 20986 ==泄漏摘要:
== 20986 ==绝对丢失:0个字节(0块)
== 20986 ==间接丢失:0个字节(0块)
== 20986 ==可能丢失:0字节,共0个块
== 20986 ==仍可访问:193,block中的281,089字节
== 20986 ==已抑制:0个字节,共0个块
== 20986 ==使用--leak-check = full重新运行以查看泄漏的内存的详细信息
== 20986 ==
== 20986 ==有关检测到和抑制的错误的计数,请重新运行:-v
== 20986 ==错误摘要:0个上下文中的0个错误(禁止:0个错误中的0个)
谢谢你的时间。
最佳答案
图书馆通常在int main()
结束后执行操作。
话虽如此,下面发生的一个例子如下:
#7 0x00007ffff72abfe8 in __run_exit_handlers (status=0,
listp=0x7ffff76355f8 <__exit_funcs>,
run_list_atexit=run_list_atexit@entry=true) at exit.c:82
#8 0x00007ffff72ac035 in __GI_exit (status=<optimized out>) at exit.c:104
#9 0x00007ffff7292837 in __libc_start_main (
main=0x429e26 <main(int, char**)>, argc=1, argv=0x7fffffffde28,
init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fffffffde18) at ../csu/libc-start.c:325
#10 0x0000000000419f69 in _start ()
在一个示例程序中。以上输出由GDB提供。但是,相关性在堆栈跟踪第7行上,您看到的部分显示为
listp=0x7ffff76355f8
;。这是注册到atexit();
函数的函数回调的列表。 ncurses中可能使用的任何东西,甚至某些std / stl库都可以在其中进行清理。通常,或者至少如我所读,valgrind不能总是从那些免费的资源中获取资源,因为调用库正在管理其清理工作。关于c++ - NCurses内存分配valgrind消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38516708/