关于强转为void*后造成的内存泄露

本文详细解释了一个在C++中遇到的内存泄露问题,原因在于使用void*进行类型转换后直接delete,忽略了析构函数的调用。文章提供了解决方案,包括继承虚拟析构函数的基类或明确处理实际类型的delete操作,避免了内存泄露,保障服务器稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写个代码很容易表达意思

class A

{

private:

    int *pTemp;

public:

    A(){pTemp= new int[16];}

   ~A(){delete[] pTemp;}

};

int main()

{

A *pA = new A();

void *p = pA;

delete p;

return 0;

}

上面的代码问题就是pA被强转为void*后delete掉了没有调用A的析构函数造成了内存泄露,结果就是杯具了

 

最近困扰服务器内存泄露的烦恼就是在这里,服务器跑不了多久就歇菜了,就是因为在一个update中一直在刷新一个保存void*的然后delete这个void*,其实本来不是用void*保存的,而是实际类的指针,只是后来又增加了一种新的结构体,自己图个简单就改成了void*,反正都有统一的delete地方,从来没想过这里会内存泄露,没有想到delete void*是不做类型检查而调用相应的析构函数

实际的解决方案倒是好解决,继承个只有虚析构函数的基类或者在delete的地方自己弄明白具体的实际类型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值