2012-07-31 93 views
3

我的程序在Ubuntu 11.04上用「make」正確編譯,但是當我運行它時,它會報錯。 這是Ubuntu上的一個bug嗎?或者這是編譯器之間變量類型的區別? 請幫我***檢測到緩衝區溢出***

*** buffer overflow detected ***: src/trilearn_player terminated 
======= Backtrace: ========= 
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0x9cd0a0] 
/lib/i386-linux-gnu/libc.so.6(+0xe5f7a)[0x9cbf7a] 
/lib/i386-linux-gnu/libc.so.6(__strcpy_chk+0x3f)[0x9cb30f] 
src/trilearn_player[0x804dd24] 
src/trilearn_player[0x808b2d5] 
src/trilearn_player[0x80920cf] 
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x8fce37] 
src/trilearn_player[0x804a421] 
======= Memory map: ======== 
00139000-0015d000 r-xp 00000000 08:0b 6060  /lib/i386-linux-gnu/libm-2.13.so 
0015d000-0015e000 r--p 00023000 08:0b 6060  /lib/i386-linux-gnu/libm-2.13.so 
0015e000-0015f000 rw-p 00024000 08:0b 6060  /lib/i386-linux-gnu/libm-2.13.so 
001b4000-001b5000 r-xp 00000000 00:00 0   [vdso] 
00488000-0049d000 r-xp 00000000 08:0b 6831  /lib/i386-linux-gnu/libpthread-2.13.so 
0049d000-0049e000 r--p 00015000 08:0b 6831  /lib/i386-linux-gnu/libpthread-2.13.so 
0049e000-0049f000 rw-p 00016000 08:0b 6831  /lib/i386-linux-gnu/libpthread-2.13.so 
0049f000-004a1000 rw-p 00000000 00:00 0 
00558000-00637000 r-xp 00000000 08:0b 134145  
00637000-0063b000 r--p 000de000 08:0b 134145  /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14 
0063b000-0063c000 rw-p 000e2000 08:0b 134145  /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14 
0063c000-00643000 rw-p 00000000 00:00 0 
0087b000-00885000 r-xp 00000000 08:0b 6826  /lib/i386-linux-gnu/libnss_files-2.13.so 
00885000-00886000 r--p 00009000 08:0b 6826  /lib/i386-linux-gnu/libnss_files-2.13.so 
00886000-00887000 rw-p 0000a000 08:0b 6826  /lib/i386-linux-gnu/libnss_files-2.13.so 
008e6000-00a42000 r-xp 00000000 08:0b 5792  /lib/i386-linux-gnu/libc-2.13.so 
+4

向我們展示代碼。這幾乎肯定不是Ubuntu中的一個bug。 – 2012-07-31 15:27:47

+0

stacktrace顯示你在代碼的某個地方使用'strcpy',並且在那裏發生溢出。原因可能是您複製的目標緩衝區很小,因此您在分配的內存之外進行復制。 – 2012-07-31 15:29:59

+1

當我第一次開始學習編程時,我很快就學會了面對機器時謙遜的價值。對我來說,假設我錯了,我的計劃錯了,我所做的事情是錯誤的,而不是責怪別的事情。 – sashang 2012-07-31 15:31:08

回答

6

/lib/i386-linux-gnu/libc.so.6(__strcpy_chk+0x3f)[0x9cb30f]

看起來你太多的字符複製到目標。