发现指针和内存泄漏
discovering pointers and having leak of memory
我在尝试使用指针时遇到问题。我已经安装了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;
然后ptr和val都将指向同一地址,并且您是同一地址上的双重空闲/删除。
我将尝试说明发生了什么,让我们假设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只是示例,实际运行此应用程序-堆上分配的地址很可能完全不同。
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存