使用memcpy()后断言失败

时间:2011-09-26 11:44:14

标签: c assert

我有以下代码,断言失败。谁能解释我为什么?

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]);
}

3 个答案:

答案 0 :(得分:3)

根据定义,特殊浮点值NaN不等于它自己:NaN == NaN返回false。所以现在我打赌不等指数的值是NaN。您可能希望在值不等于自身的索引处打印出值,而不是使用assert

答案 1 :(得分:1)

是为E和E_new分配了足够的内存(即有没有机会在数组的末尾写入其他内容,而其他东西随后会删除那里的内容?E和E_new在内存中是否重叠?

答案 2 :(得分:0)

假设您要从E复制到E_new,您对memcpy的参数顺序错误 - 第二个参数是源指针,第一个参数是目标。