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