指针类型被转了,delete会内存泄漏吗?

ocean1004 2009-01-21 07:50:46

int main()
{
CString *p = new CString;
delete (void*)p; //不泄漏

CString *p2 = new CString;
delete (int*)p2; //泄漏

DWORD p3;
(CString*)p3 = new CString; //这个怎么写?DWORD是外参传进来的,我想给他赋值,然后删除
delete p3;
}

如果我定义了个
为什么?
...全文
190 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hearoequal 2009-01-22
  • 打赏
  • 举报
回复
你要理解DEL的机制

DEL的时候
你的指针指向的位置是 DEL开始的空间的地址
你要DEL多长的地址空间 是由你DEL时 指针的类型决定的
是char就DEL 1byte 是int 就DEL 1WORD

如果DEL的时候 的类型大小 和你NEW的时候的类型大小不一致就会有泄露
vincen_cn 2009-01-21
  • 打赏
  • 举报
回复
很多指针被转成long型或者DWORD型的,没问题
释放的时候要转回去。
ocean1004 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dongguan131 的回复:]
int main()
{
DataMrg datamrg;
DWORD p;
CString *pTemp = new CString;
p = (DWORD)pTemp;
datamrg.SetData(p);

......
.......
.........
DWORD p2 = datamrg.GetData();
delete p2;
}
单就这段代码来说,应该delete的是pTemp,至于p2是不用删除的,因为它并没有new出来
[/Quote]

p2的new和delete不在一个函数里
低头路过 2009-01-21
  • 打赏
  • 举报
回复
int main()
{
DataMrg datamrg;
DWORD p;
CString *pTemp = new CString;
p = (DWORD)pTemp;
datamrg.SetData(p);

......
.......
.........
DWORD p2 = datamrg.GetData();
delete p2;
}
单就这段代码来说,应该delete的是pTemp,至于p2是不用删除的,因为它并没有new出来
ocean1004 2009-01-21
  • 打赏
  • 举报
回复

class DataMrg
{
public:
DWORD GetData();
void SetData(DWORD pData);
};

int main()
{
DataMrg datamrg;
DWORD p;
CString *pTemp = new CString;
p = (DWORD)pTemp;
datamrg.SetData(p);

......
.......
.........
DWORD p2 = datamrg.GetData();
delete p2;
}


贴个再完整点的程序
waizqfor 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 ocean1004 的帖子:]
C/C++ code
int main()
{
CString *p = new CString;
delete (void*)p; //不泄漏

CString *p2 = new CString;
delete (int*)p2; //泄漏

DWORD p3;
(CString*)p3 = new CString; //这个怎么写?DWORD是外参传进来的,我想给他赋值,然后删除
delete p3;
}



如果我定义了个
为什么?
[/Quote]
CString p3 = new CString;
p3=(Cstring *)p3;
delete p3
LZ为什么 要强制转换呢
HelloDan 2009-01-21
  • 打赏
  • 举报
回复
我学得应该是什么类型new出来的就什么类型delete掉这样一定不会有错。
lbh2001 2009-01-21
  • 打赏
  • 举报
回复
为什么要那样,这样不行吗,反正是在内部释放

DWORD p3;
CString *p = new CString;
p3 = (CString *)p;
....
delete p;

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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