2011-04-20 24 views
0

嘿,大家。我正在用C++編寫一個十六進制計算器。這些操作必須「手工」完成,因爲要求程序能夠處理40位數的操作數(而且16^40比長時間可處理的要大得多)。glibc檢測到,但我沒有使用動態內存?

雖然我有一些問題。在我的Mac(OS X 10.6)上,我可以在終端中使用Xcode和g ++進行編譯和運行。我甚至在使用Dev C++的Windows上有一位朋友說它運行良好。如果我ssh到我校的孫羣,但是,我g ++以及應用程序運行,但經過幾次操作胡扯出來用:

"*** glibc detected *** ./a.out: free(): invalid pointer: 0xb786e6f4 ***". 

我猜太陽集羣幹什麼用的,因此爲什麼我的教授我失分了。

我不確定爲什麼會出現這種情況,因爲我沒有明確地使用內存分配,並且從我讀過的所有錯誤中,通常(並非總是)嘗試刪除不是與新運營商合作。我想知道是否感謝我正在做的來回的字符串/字符轉換,但它仍然讓我感到困惑,因爲它會在少數情況下正常運行,然後死亡。

該程序基本上是要求一個文件名,讀取文件並根據需要做什麼解釋每個字符串,然後進行數學計算,直到文件結束。

這裏是我的代碼:http://pastebin.com/1DW5pd6p

這裏是我使用(再注二等手術後我的程序死亡)的數據文件:我已經加裝一些字符串與字符數組和http://pastebin.com/xx59eQsu

這似乎讓我得到了這兩項行動,但我卻感到困惑。感謝大家的期待。所有的迴應都很感激。

+1

呃..你爲什麼提到16^40? – fazo 2011-04-20 19:23:35

+1

您可能沒有明確地進行內存分配,但是您使用的是字符串和堆棧類型操作,它們使用內存分配調用。 – 2011-04-20 19:24:39

+0

fazo - 如果有人建議使用sprinf在鹼基之間轉換:p – 2011-04-20 19:38:50

回答

3
string str; 
char chr[1]; 
... 
sprintf(chr, "%u", sum); 

你滿溢chr,這很有可能是由覆蓋由std::string使用的一些內部指針變量影響str。當字符串被破壞時,它會嘗試刪除這個無效指針。

確保chr足夠大 - 例如, char chr[32];應該足夠打印你的積分。

+0

謝謝,修復它!不過,我現在只覺得啞巴。似乎只是我忽視的一些東西。再次謝謝你! – 2011-04-20 19:38:16

相關問題