Утверждение не выполняется после использования memcpy () - PullRequest
1 голос
/ 26 сентября 2011

У меня есть следующий код, где утверждение не удается.Может кто-нибудь объяснить мне, почему?

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 ]

3 голосов
/ 26 сентября 2011

По определению, специальное значение с плавающей точкой NaN не равно само себе: NaN == NaN возвращает false. Так что теперь я держу пари, что значение при неравном индексе составляет NaN. Возможно, вы захотите распечатать значение в индексе, где значение не равно самому себе, вместо использования assert.

1 голос
/ 26 сентября 2011

достаточно ли памяти для E и E_new (т. Е. Есть ли вероятность того, что один или другой записал конец массива, и что-то еще впоследствии уничтожило то, что было? Перекрываются ли E и E_new в памяти?

0 голосов
/ 26 сентября 2011

Предполагая, что вы хотите скопировать из E в E_new, ваши аргументы для memcpy расположены в неправильном порядке - второй аргумент является указателем источника, первый - адресатом.

...