我有以下代码,断言失败。谁能解释我为什么?
double *E = (double *) malloc(sizeof(double) * voxelSpaceSize);
double *E_new = (double *) malloc(sizeof(double) * voxelSpaceSize);
// ...some manipulations inside E and E_new, the memory locations do not change though
...
memcpy(E, E_new, sizeof(double) * voxelSpaceSize);
for (int i=0; i<voxelSpaceSize; i++) {
assert(E[i] == E_new[i]);
}
答案 0 :(得分:3)
根据定义,特殊浮点值NaN
不等于它自己:NaN == NaN
返回false。所以现在我打赌不等指数的值是NaN
。您可能希望在值不等于自身的索引处打印出值,而不是使用assert
。
答案 1 :(得分:1)
是为E和E_new分配了足够的内存(即有没有机会在数组的末尾写入其他内容,而其他东西随后会删除那里的内容?E和E_new在内存中是否重叠?
答案 2 :(得分:0)
假设您要从E
复制到E_new
,您对memcpy
的参数顺序错误 - 第二个参数是源指针,第一个参数是目标。