Dan*_*can 29 c++ valgrind memory-leaks
我使用valgrindwith 检查了C++中的以下代码--leak-check=full,它说没有内存泄漏.这是为什么?
char *p = new char[256];
delete p;
new[]delete[]据我所知应该匹配.
小智 12
delete并且delete[]仅当p指向基本数据类型时才相等,例如char或int.
如果p指向对象数组,结果将不同.请尝试以下代码:
class T {
public:
    T() { cout << "constructor" << endl; }
    ~T() { cout << "destructor" << endl; }
};
int main()
{
    const int NUM = 3;
    T* p1 = new T[NUM];
    cout << p1 << endl;
    //  delete[] p1;
    delete p1;
    T* p2 = new T[NUM];
    cout << p2 << endl;
    delete[] p2;
}
通过使用delete[]数组中的所有析构函数将被调用.通过使用delete只有p[0]的析构函数将被调用.
asc*_*ler 11
当我尝试这个时,valgrind报道:
==22707== Mismatched free() / delete / delete []
==22707==    at 0x4C2B59C: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22707==    by 0x40066D: main (in /home/andrew/stackoverflow/memtest)
==22707==  Address 0x5a1a040 is 0 bytes inside a block of size 256 alloc'd
==22707==    at 0x4C2C037: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22707==    by 0x40065D: main (in /home/andrew/stackoverflow/memtest)
这不是真正的内存泄漏,但valgrind确实注意到了这个问题.
| 归档时间: | 
 | 
| 查看次数: | 1808 次 | 
| 最近记录: |