2012-07-31 97 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]

看起来你太多的字符复制到目标。