关于C++的new和delete的问题

stn 2001-12-28 02:40:29
class CA;
CA *p1 = new CA; //所分配的内存块标示为 A 内存
char *p2 = (char *)p1;
delete p2; //该语句能否完全释放 A 内存?
...全文
146 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
efad 2001-12-28
  • 打赏
  • 举报
回复
不能!
shg918 2001-12-28
  • 打赏
  • 举报
回复
很好
xtky_limi 2001-12-28
  • 打赏
  • 举报
回复
学习中!
mahongxi 2001-12-28
  • 打赏
  • 举报
回复
1好像可以释放内存
#include <conio.h>
#include <iostream.h>
class CA
{public:
char a[4];
};
void main()
{CA * cap=new CA;
cout<<"cap="<<cap<<endl;
char * cp=(char *)cap;
cout<<"cp="<<cp<<endl;
delete cp;
int *ip=new int;
cout<<"ip="<<ip<<endl;
getch();
}
执行后得到:ip==cap的结论。如果只FREE一个CHAR的内存,系统就不会再将这个NEW出来的INT分配到原CAP的位置了,究其原因可能如a_kun(狂人日记)所述。

我觉得这样的问题很有意义,有利于大家了解编译的工作原理,我想如果不是贴主提出了这样的问题,可能还会有好多人像我一样不能确定。

感谢stn()、a_kun(狂人日记)
stn 2001-12-28
  • 打赏
  • 举报
回复
经过一番试验与总结:
1、可以完全释放内存;
2、不能执行析构函数;
stn 2001-12-28
  • 打赏
  • 举报
回复
在此,我想解释一下我为什么做怎么“蠢”的事:
大家知道,C++BUILDER 或 VC++ 都有一个 TTreeView 或 CTreeView 类,
对tree的每个节点都有一个 Data 成员用于指向一个相关的东东,
那么我在创建一棵tree的时候,可能把其中节点的 Data 指向一个附加东东,
而 C++BUILDER 在释放 TTreeView 的时候并不会把节点的 Data 所指向的东东也释放掉,
所以我必须搜索每个节点逐个释放 Data,但这时我不想关心 Data 所指向的东东的类型,
因为 Data 本身是:void *Data;
stn 2001-12-28
  • 打赏
  • 举报
回复
总的来说可能存在两个问题:
1、是释放CA所占用的整个内存,还是释放 char 所占用的内存
2、CA的析构函数是否还执行,该问题已经被证实不执行了

谁回答剩下的问题(1)?
a_kun 2001-12-28
  • 打赏
  • 举报
回复
stn所说的方法是可行的,因为对于指针,当对它分配了堆的空间后它所指向的位置有四个字节是描述分配情况的,delete时只根据这个信息进行释放。是什么类型的指针都一样。
lasixtwo的方法同样也是可行的。

只是个人认为stn的做法没有什么意义。
fiolin 2001-12-28
  • 打赏
  • 举报
回复
看 C++ 方面的书吧!!!
supperapplication 2001-12-28
  • 打赏
  • 举报
回复
to lasixtwo()可以的
lasixtwo 2001-12-28
  • 打赏
  • 举报
回复
class CA;
CA *p1 = new CA; //所分配的内存块标示为 A 内存
CA *p2;
p2 = p1;
delete p2; //该语句能否完全释放 A 内存?
可以试一试。
gpg 2001-12-28
  • 打赏
  • 举报
回复
哪创建,哪删除,如同哪跌倒,哪爬起一样。
kingfish 2001-12-28
  • 打赏
  • 举报
回复
应该可以
vc6没检测到memory leaks
lengnuan 2001-12-28
  • 打赏
  • 举报
回复
胡思乱想
zzh 2001-12-28
  • 打赏
  • 举报
回复
那有这种使用方法的。你这样强制转换是不行的。
方法如下
Class CA
CA *p1 = new CA;
char *p2 = new char[100];
delete p1
p1 = NULL;
delete[] p2
p2 = NULL

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧