2011-01-29 82 views
0

我寧願不轉儲代碼,但解釋我的問題。經過幾個小時的調試,我終於明白,在我的代碼中,某個浮點值沒有明確修改,變成了很大(超過1e15)。我在我的程序中使用了大量的內存(一個包含800多個單詞的字符串數組),除此之外,我不知道可能會導致這種情況。浮動值突然變大

如果任何人有這方面的任何想法,請分享。否則,我會很快發佈一個 代碼的pastebin。

編輯: 這裏是代碼:http://pastebin.com/vgiZweNq。問題在於next_generation()函數,其中sumfit變量在循環中的隨機時間變爲堅果。

另外,我已經在linux上使用-fno-stack-limit-fstack-check編譯過,以避免堆棧溢出。

編輯2: 我已經改變了程序使用動態分配鏈表,以進一步避免堆棧溢出。儘管如此,sumfit隨機點更改爲Floatzilla,通常很早。

乾杯!

+2

如果你沒有明確地觸及變量,我們最好的猜測是一些內存管理錯誤。發佈代碼,今天水晶球朦朧。 – zoul 2011-01-29 11:39:46

回答

1

您使用的是CHROM陣列上的strcpy,但我看不出他們曾經得到空值終止。

也許我只是缺少它,但。

2

由於變量顯然正在從一個意想不到的點修改,你可能要檢查一些可能性:

  • 是它正在從不同的線程或中斷/事件處理程序修改?如果是這樣,訪問是否正確同步以防止數據競爭?
  • 你正在做指針算術,可能是越野車,並導致訪問目標緩衝區之外?
  • 你在不同大小的類型之間轉換指針嗎?
  • 尤其是如果您正在使用嵌入式設備:可能內存已滿,堆棧與堆或全局變量重疊。有關平臺

更多信息,發生這種情況的將是有益的。

0

你有一個巨大的字符串數組。我想你可能會結束它。跟蹤進入該數組的數據的大小。