发现指针和内存泄漏



我在尝试使用指针时遇到问题。我已经安装了valgrind,在使用它检查内存泄漏后,我看到一个是由于new int((造成的。不过,我的新增和删除数量完全相同。我不明白。你能看到问题吗?感谢您帮助

#include <iostream>
int main()
{   
const int* ptr = new int();
int* val=new int();
ptr = val;   
std::cout << *val << std::endl;
delete val;
delete ptr;

return 0;
}    

问题就在这里:

ptr = val;

然后ptrval都将指向同一地址,并且您是同一地址上的双重空闲/删除。

我将尝试说明发生了什么,让我们假设32位地址:

int main()
{   
const int* ptr = new int();      // ptr allocate 4 bytes @ heap
// for illustration purposes
// ptr is @ address 0x80000010
int* val=new int();              // val allocate 4 bytes @ heap
// val is @ address 0x80000020
ptr = val;                       // now ptr is @ address 0x80000020   
std::cout << *val << std::endl;  // print out the int @ address 0x80000020   
delete val;                      // free memory @ 0x80000020
delete ptr;                      // free memory @ 0x80000020 - this will result in a double-free, 
// no good, program will most likely crash

return 0;
}  

注意:地址0x80000010和0x80000020只是示例,实际运行此应用程序-堆上分配的地址很可能完全不同。

最新更新