C Различные ответы для переменной при запуске «Отладка» и «Запуск без отладки». - PullRequest
1 голос
/ 11 мая 2010

Я продолжаю получать этот странный вывод из своего кода каждый раз, когда использую «запуск без выгрузки» (ctrl-F5), в отличие от обычного «отладка» (F5).

Когда я пытаюсь найти следующее значение norm_differnece в режиме отладки (нажав клавишу F5), он дает мне правильный ответ для norm_difference

normdifference = 1.000000

но в «пуск без отладки» (нажатие ctrl-f5) неверный вывод

normdifference = 14568160835476641000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Ниже приведен фрагмент кода, который дает вывод Примечание: X [] = является массивом хранимых значений DOUBLE

for(i=0;i<n;i++){
    sum_difference += (pow((X[i*n]-X[i]),2));
      }
    norm_difference = sqrt(norm_difference);
for(i=0;i<n;i++){
    sum_norm_1 += pow(X[i],2);
      }
    norm_1 = sqrt(norm_1);
  //Take square root of the sum of squares for the row
    printf("normdifference = %f \n norm_1 = %f \n",norm_difference,norm_1);

Ответы [ 3 ]

2 голосов
/ 11 мая 2010

Возможно, вы читаете после конца вашего массива. Некоторые компиляторы в режиме отладки будут освобождать память, но не в режиме выпуска, поэтому при отладке плохое чтение получает 0, в то время как в выпуске оно получает некоторое большое число

или согласно @Marcelo Cantos, ваши переменные не были инициализированы - при отладке они могут начинаться с 0

1 голос
/ 11 мая 2010

Возможно, вы не инициализировали sum_difference и sum_norm_1 нулем.

0 голосов
/ 11 мая 2010

Похоже, в вашем коде есть несколько ошибок. Я предполагаю, что это должно быть:

sum_difference = 0; // <<< FIX
for (i = 0; i < n; i++)
{
    sum_difference += (pow((X[i * n] - X[i]), 2));
}
norm_difference = sqrt(sum_difference); // <<< FIX
sum_norm_1 = 0; // <<< FIX
for (i = 0; i < n; i++)
{
    sum_norm_1 += pow(X[i], 2);
}
norm_1 = sqrt(sum_norm_1); // <<< FIX
//Take square root of the sum of squares for the row
printf("normdifference = %f \n norm_1 = %f \n", norm_difference, norm_1);
...