您的位置:首页 > 其它

含虚函数的struct在其构造中要谨慎使用memset函数对数据成员清零

2012-02-01 11:34 232 查看
假设有定义如下

struct st

{

int a;

char b[20];

st(){memset(this, 0, sizeof(st));}

virtual ~st(){}

};

st *p = NULL;

p = new st;

delete p; //p!=NULL, 但程序抛出异常,提示访问了非法内存地址0x000000

如果去掉st结构中析构函数之前的vitual关键字,那么delete就不会有错误。

分析了一下delete出错的原因,是由于st结构中含有虚函数,因此st的对象(实例)

就会含有vfptr指向虚函数表,而构造函数调用memset(this, 0, sizeof(st))将

结构st中的vfptr指针置零,才会导致delete对象时访问vfptr错误,从而抛出异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐