C++内存释放问题.

来源:百度知道 编辑:UC知道 时间:2024/06/06 10:43:09
int* iPtr = new int(3);
char* cPtr = (char*) iPtr; //注意这句
delete cPtr; //是否可以正确释放内存

能正确释放内存,测试如下:
#include<iostream.h>

void main()
{
int* iPtr = new int(3);
char* cPtr = (char*) iPtr; //注意这句
cout<<*cPtr<<endl;
cout<<*iPtr<<endl;
delete cPtr; //是否可以正确释放内存

}
输出结果为一个ANSII码为3的字符,一个是3,但是
#include<iostream.h>

void main()
{
int* iPtr = new int(3);
char* cPtr = (char*) iPtr; //注意这句
cout<<*cPtr<<endl;
cout<<*iPtr<<endl;
delete cPtr; //是否可以正确释放内存
cout<<*cPtr<<endl;
cout<<*iPtr<<endl;

}
输出结果是未知的不可预测的数据,说明指针所指内容已经不是堆中的空间。

如果大小不一样,也就不能正确释放了.
如果是类类型,情况就更糟糕了.

可以正确释放内存,如果不是基本类型就不可以了