关于内存分配与释放的解析
2010-12-27 21:24
309 查看
无论是 malloc,还是 new 分配的内存,如下
struct stTest
{
char a[10000];
};
stTest *p = (stTest *)malloc(sizeof(stTest));
char *p2 = (char *)p;
free(p2); ///经这样释放后不会引起内存泄露
p2 = NULL;
stTest *p = new stTest;
char *p2 = (char *)p;
delete p2; ///经这样释放后不会引起内存泄露
p2 = NULL;
如下也不会有内存泄露
struct stTest
{
char a[10000]; ///注意没有析构与构造函数
};
struct stTest2
{
char a[999]; ///注意没有析构与构造函数
};
stTest *p = new stTest;
stTest2 *p2 = (stTest2 *)p;
delete p2; ///经这样释放后不会引起内存泄露
p2 = NULL;
因为我们分配或释放的内存指针,必须是 new(delete),malloc(free)配对的内存指针,也就是指向的地址是必须是一致的,这样释放就不会有错.
举个例子
stTest *p = new stTest;///分配内存后,p指向的内存地址假设为 0x10245678
stTest2 *p2 = (stTest2 *)p; ///转化后 p2指向的内存地址也为 0x10245678
delete p2; ///delete 释放的内存地址与 new 的分配的内存地址一样,
///都是 0x10245678,所以不会泄露,只要遵循这个原则,不管类型怎么转化,内存也不会泄露
但是如下,则会出内存错误
stTest *p = new stTest;///分配内存后,p指向的内存地址假设为 0x10245678
char *pTemp = (char *)p;
stTest2 *p2 = (stTest2 *)(pTemp + 0x80); ///转化后 p2指向的内存地址则成了 0x10245678 + 0x80;
delete p2; ///delete 释放的内存地址与 new 的分配的内存地址不一样了,则会出内存错误,这个要切记
struct stTest
{
char a[10000];
};
stTest *p = (stTest *)malloc(sizeof(stTest));
char *p2 = (char *)p;
free(p2); ///经这样释放后不会引起内存泄露
p2 = NULL;
stTest *p = new stTest;
char *p2 = (char *)p;
delete p2; ///经这样释放后不会引起内存泄露
p2 = NULL;
如下也不会有内存泄露
struct stTest
{
char a[10000]; ///注意没有析构与构造函数
};
struct stTest2
{
char a[999]; ///注意没有析构与构造函数
};
stTest *p = new stTest;
stTest2 *p2 = (stTest2 *)p;
delete p2; ///经这样释放后不会引起内存泄露
p2 = NULL;
因为我们分配或释放的内存指针,必须是 new(delete),malloc(free)配对的内存指针,也就是指向的地址是必须是一致的,这样释放就不会有错.
举个例子
stTest *p = new stTest;///分配内存后,p指向的内存地址假设为 0x10245678
stTest2 *p2 = (stTest2 *)p; ///转化后 p2指向的内存地址也为 0x10245678
delete p2; ///delete 释放的内存地址与 new 的分配的内存地址一样,
///都是 0x10245678,所以不会泄露,只要遵循这个原则,不管类型怎么转化,内存也不会泄露
但是如下,则会出内存错误
stTest *p = new stTest;///分配内存后,p指向的内存地址假设为 0x10245678
char *pTemp = (char *)p;
stTest2 *p2 = (stTest2 *)(pTemp + 0x80); ///转化后 p2指向的内存地址则成了 0x10245678 + 0x80;
delete p2; ///delete 释放的内存地址与 new 的分配的内存地址不一样了,则会出内存错误,这个要切记
相关文章推荐
- 关于C++中结构体及其指针成员的内存分配和释放
- 解析PHP中的内存管理,PHP动态分配和释放内存
- 关于结构体内存分配及释放
- C关于内存分配的错误解析
- C/C++动态分配与释放内存的区别详细解析
- 关于C/C++中内存分配与释放的疑惑?
- C/C++动态分配与释放内存的区别详细解析
- 关于内存分配与释放的试验
- C/C++动态分配与释放内存的区别详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- C/C++动态分配与释放内存的区别详细解析
- C/C++动态分配与释放内存的区别详细解析
- C/C++动态分配与释放内存的区别详细解析
- c语言中内存的动态分配与释放(多维动态数组构建)
- (转)频繁分配释放内存导致的性能问题的分析
- 关于动态内存分配与字符串操纵的问题总结
- 关于释放内存的所费的时间.
- C语言中多维数组的内存分配和释放(malloc与free)(转)
- C++笔记(7):动态内存分配与释放函数
- Java当中的内存分配以及值传递问题内存解析