关于C语言的memset容易出现的问题

今晚一个关于memset函数的问题一直调试不出来。部分代码如下:


const unsigned int unmarked = 10000;
int* diag_map = (int*)malloc(sizeof(int)*(num_rows+num_cols));
memset(diag_map,unmarked,sizeof(int)*(num_rows+num_cols));
for(i=0;i<num_nonzeros;i++){
    if(diag_map[i] == unmarked){
        //TODO
    }
}

经排查,发现diag_map[i] == unmarked 这个条件一直不成立。仔细分析发现:

unsigned int 有一个特性就是如果将其赋值或者当作字节来使用的话,编译器将会截取低八位作为一个字节使用。

而memset函数进行内存初始化的时候恰好是根据字节填充的。所以将取10000的低八位就是00010000B作为字节使用。

在我的机器上,int占用四个字节,因此数组初始化后,本来想要每个元素都为10000.

但实际上每个元素为00010000000100000001000000010000B即为269488144.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值