У меня есть программа на C, которая дает разные результаты при запуске на двух машинах.
На первой машине (Linux Ubuntu, компилятор gcc v 4.4.3, 64-битная память, 4 ГБ) она работает нормально и дает разумные результаты (фактически это машина, на которой она в основном разрабатывалась).
На втором компьютере (Mac OSX 10.5.8, компилятор gcc v 4.4.5, 32-битная память, 2 ГБ) результаты выглядят бессмысленными.
В частности, существует массив A, заполненный во время цикла FOR, в котором каждый член A [i] зависит от A [i-1]. Я обнаружил, что после примерно 4000 шагов моя машина начинает забывать значения A [i-1], а затем вычисляет ерунду.
Еще более странно для меня проблема исчезнет, если в начальный список объявления переменных функции я добавлю еще один фиктивный массив, который я даже не использую в программе.
То есть код с заголовком вроде
...
double X[n_max];
double Y[n_max];
double A[n_max];
...
работает, а
...
double X[n_max];
// double Y[n_max];
double A[n_max];
нет.
Полагаю, в распределении памяти есть какая-то проблема, и когда я выделяю память для фиктивного массива Y, беспорядок просто перемещается в другое место.
Я не понимаю ни того, почему у моего Mac нет проблем с перезаписью данных, которые он должен помнить, ни почему эта же программа работает на компьютере с Linux.
Я надеюсь, что проблема ясна, любая помощь приветствуется.
Спасибо!