Стоимость с плавающей точкой внезапно становится огромной - PullRequest
0 голосов
/ 29 января 2011

Я бы предпочел не создавать дамп кода, а объяснить мою проблему.После нескольких часов отладки мне удалось понять, что в какой-то момент в моем коде значение с плавающей запятой, которое не изменено явно , становится ОГРОМНЫМ (более 1e15).Я использую много памяти в моей программе (строковый массив, содержащий более 800 слов), но я понятия не имею, что может вызвать это.

Если у кого-то есть идеи по этому поводу, пожалуйста, поделитесь,В противном случае я скоро выложу вставку кода.

РЕДАКТИРОВАТЬ: Вот код: http://pastebin.com/vgiZweNq. Проблема заключается в функции next_generation(), гдеsumfit переменная сходит с ума в случайные моменты времени в цикле.

Кроме того, я скомпилировал это на linux, используя -fno-stack-limit и -fstack-check, чтобы избежать переполнения стека.

РЕДАКТИРОВАТЬ 2: Я изменил программу, чтобы использовать динамически назначенный связанный список, чтобы далее избежать переполнения стека.Тем не менее, sumfit меняется на Floatzilla в случайных точках, обычно довольно рано.

Приветствия!

Ответы [ 3 ]

2 голосов
/ 29 января 2011

Поскольку переменная явно изменяется с неожиданной точки, вы можете проверить некоторые возможности:

  • Изменяется ли она из другого потока или из обработчика прерываний / событий?Если да, то правильно ли синхронизирован доступ для предотвращения гонки данных?
  • Используете ли вы арифметику указателей, которая может содержать ошибки и вызывать доступ за пределами предполагаемого буфера?разных размеров?
  • Особенно, если вы работаете на встроенном устройстве: возможно, память заполнена, а ваш стек перекрывает кучу или глобальные переменные.

Подробнее оПлатформа, на которой это происходит, будет полезна.

1 голос
/ 29 января 2011

Вы используете strcpy в массиве chrom, но я не вижу, где они когда-либо заканчиваются нулем

Может быть, я просто скучаю по этому.

0 голосов
/ 29 января 2011

У вас есть огромный массив строк.Я полагаю, вы, вероятно, выходите из этого.Следите за размером данных, поступающих в этот массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...