写了一个小程序,工作时会跑一个大循环,在运行时发现有严重的内存泄露,内存不停增长。
经过几次复查,终于找出问题所在,代码结构大概如下:
struct myobj
{
myobj()
{
memset(this,0,sizeof(myobj));
}
int n;
//...其他成员
string s;
}
定义了一个结构体,有众多类型成员,想初始化成员但又懒得一一赋值,所以在构造函数使用了memset函数。
问题就出在这里,该函数同样清空了所有string成员的内存空间,影响了该对象的析构,从而导致内存泄露。
所以当对象有复杂类型成员时,构造函数中不要使用memset初始化,有指针成员时要谨慎使用!
本文通过一个具体的案例探讨了在C++中不当使用memset函数可能导致的内存泄露问题。特别是当结构体中含有string等复杂类型成员时,直接使用memset进行初始化会干扰对象的正常析构过程,进而引发内存泄露。
5306

被折叠的 条评论
为什么被折叠?



