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

来源:互联网 发布:人的音域 知乎 编辑:程序博客网 时间:2024/04/30 23:05

今晚一个关于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.

0 0
原创粉丝点击