[問題] malloc segmentation fault
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++ linux
有一台工作站可以跑12個input通通都沒錯,
有一台不行跑12個input, 有四個都出現同樣的segmentation fault, 發生位置都相同
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
no
問題(Question):
float * slength = (float *) calloc(nLines, sizeof(float));
for loop{
slength[i] = sqrtf(lines[i*6+1]-lines[i*6+0]) +
square(lines[i*6+3]-lines[i*6+2]);
}
for loop{
float s1 = min(slength[i], slength[j]);
}
可是在最後一個for loop的時候,
當到某一輪的時候, slength這個指標會換位置,
導致我存取這條的時候就會segmentation fault
會知道指標換位置是因為我用printf("%d", slength);
本來都一直是143630752, 可是某一輪進入loop的時候變成了1048625980
請問這有可能是什麼原因造成的呢?
餵入的資料(Input):
預期的正確結果(Expected Output):
應該要沒有segmentation fault
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.33.208.33
推
08/18 14:30, , 1F
08/18 14:30, 1F
→
08/18 14:31, , 2F
08/18 14:31, 2F
→
08/18 14:32, , 3F
08/18 14:32, 3F
→
08/18 14:32, , 4F
08/18 14:32, 4F
→
08/18 14:44, , 5F
08/18 14:44, 5F
→
08/18 14:48, , 6F
08/18 14:48, 6F
→
08/18 14:53, , 7F
08/18 14:53, 7F
謝謝大家幫忙^^
真的是有個陣列只宣告了8個位置,
陣列的INDEX在某一次的時候等於8, 而超過宣告的數量了,
=======
不過我在用Valgrind的時候,
他只會顯示我的執行檔名字,
我看網路上別人的教學文章中,
他的還會寫是哪個.c檔且第幾行出錯都會寫出來,
http://endlesschildhood.blogspot.com/2010/01/valgrind-tutorial.html
我是照著這一篇的講解跑的
--leak-check=full
--log-file=vglog
用了這兩個參數,
我的code是有25個.cpp檔(一個main.cpp), 還有24個相對應的.h檔
是因為我比較多檔案所以他寫不出是哪個檔案第幾行嗎?
謝謝
※ 編輯: guanrulee 來自: 114.33.208.33 (08/18 17:34)
※ 編輯: guanrulee 來自: 114.33.208.33 (08/18 17:35)
→
08/18 17:49, , 8F
08/18 17:49, 8F
真的加了就ok了 謝謝樓上^^
※ 編輯: guanrulee 來自: 1.175.132.15 (08/18 19:08)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):