2014-12-02 58 views
-3

当一个静态代码分析软件没有在构造函数中抱怨内存泄漏时,我很感兴趣。任何输入都会有帮助。请注意,它不是班级成员。它是ctor内的本地指针构造函数中的本地内存泄漏

class ABC 
{ 
    public: 
     ABC() 
     { 
      int *p = new int[10]; 
      //No delete invoked... 
     } 
}; 
+2

有时间寻找更好的静态代码分析软件?目前还不清楚你问的是什么问题。 – 2014-12-02 06:14:03

+2

所以你的问题真的是这个软件的名字你没有提到? – 2014-12-02 06:14:33

+0

@remyabel不完全。这是关于构造函数的行为。 – deepdive 2014-12-02 06:30:05

回答

2

你并不真的需要这个静态分析工具。 GCC已经移植了LLVM's sanitizer,并且自GCC 4.9起可用。这显然也是Clang的一部分。

✿'‿`)〜/测试>克++ - 躯干-fsanitize =未定义,地址,泄漏-std = C++ 11 TEST.CPP -g -Wall -Wextra -pedantic

test.cpp: In constructor ‘ABC::ABC()’: 
test.cpp:6:18: warning: unused variable ‘p’ [-Wunused-variable] 
      int *p = new int[10]; 
      ^

(✿'‿`)〜/测试> ./a.out

================================================================= 
==1713==ERROR: LeakSanitizer: detected memory leaks 

Direct leak of 40 byte(s) in 1 object(s) allocated from: 
    #0 0x7f2535b07919 in operator new[](unsigned long) ../../../../trunk/libsanitizer/asan/asan_new_delete.cc:62 
    #1 0x4008cb in ABC::ABC() ~/test/test.cpp:6 
    #2 0x400856 in main ~/test/test.cpp:13 
    #3 0x31a1c21d64 in __libc_start_main (/lib64/libc.so.6+0x31a1c21d64) 

SUMMARY: AddressSanitizer: 40 byte(s) leaked in 1 allocation(s). 

这是一个运行时工具,但它完美罚款这样的情况。当然,也总是有valgrind,但你不能一起使用它们。在使用valgrind之前首先禁用消毒剂。最后但并非最不重要,gdb是你的朋友。