memset 线程安全_老生常谈,正确使用memset

本文探讨了在使用memset时需要注意的几个问题,包括以字节为单位初始化内存,初始化包含指针的结构体可能导致内存泄漏,以及初始化包含虚函数的对象可能破坏虚函数表,从而引发运行时异常。慎用memset对于避免意外错误和保持代码健壮性至关重要。
摘要由CSDN通过智能技术生成

转自:http://blog.csdn.net/my_business/article/details/40537653

前段项目中发现一个问题,程序总是在某个dynamic_cast进行动态转换时出异常,查了半天才发现问题原来是出在memset的使用上,虽然问题本身显而易见,但当处于几十万行代码量级中时,就变得不太那么容易定位了。

本文归纳了下使用memset几个需要注意的地方,虽然内容很简单,但也希望对大家有所帮助。

1. memset是以字节为单位,初始化内存块。

当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值,比如,

char data[10];

memset(data, 1, sizeof(data));    // right

memset(data, 0, sizeof(data));    // right

而在初始化其他基础类型时,则需要注意,比如,

int data[10];

memset(data, 0, sizeof(data));    // right

memset(data, -1, sizeof(data));    // right

memset(data, 1, sizeof(data));    // wrong, data[x] would be 0x0101 instead of 1

2. 当结构体类型中包含指针时,在使用memset初始化时需要小心。

比如如下代码中,

struct Parameters {

int x;

int* p_x;

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值