c语言 memset超过1m_【转】不当使用memset函数带来的麻烦问题

通常在C的编程中,我们经常使用memset函数将一块连续的内存区域清零或设置为其它指定的值,最近在移植一段java代码到C++的时候,不当使用memset函数花费了我几个小时的调试时间。对于虚函数的底层机制很多资料都有较详细阐述,但对我个人而言,这次的调试让我感触颇深。

先来看一段代码,在继承的类Advance之中,有很多属性字段,我希望将其清成0或NULL,于是在构造函数中我通过memset将当前类的所有属性置0。

class Base{

public:

virtual void kickoff() = 0;

};

class Advance:public Base{

public:

Advance(){

memset(this, 0, sizeof(Advance));

}

void kickoff(){

count++;

//... do something else;

}

private:

int attr1, attr2;

char* label;

int count;

//...

other attributes, they should be initiated to 0 or NULL at beginning.

};

int _tmain(int argc, _TCHAR* argv[])

{

Base* ptr = new Advance();

ptr->kickoff();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值