问题已经找出来了, 不是程序的问题, 是传入的文件的问题,超过了在程序中规定的数组的大小,访问越界
今天忙了一天,就写了一个程序,还段错误,解决了
但是不知道具体的原因。多半是栈的问题。。 guess
先说下环境。 读取一文件。 对其中的每行数据操作(一行不是很长)。
char buf[513]
用的fgets(buf ,513,fp)
在这种情况下,读取一个很小的数据文件 是正常的。
但是当我放入一个几万行的文件时候。
fgets 也能够读取到最后一个行的数据(通过打印看出来的)。 却不能够跳出fgets。显示下面的信息
下面的就看不懂了。
我最后的解决办法是设置如下
char buf[513]
用的fgets(buf , 111 ,fp)
char buf[513]
用的fgets(buf ,513,fp)
在这种情况下,读取一个很小的数据文件 是正常的。
但是当我放入一个几万行的文件时候。
fgets 也能够读取到最后一个行的数据(通过打印看出来的)。 却不能够跳出fgets。显示下面的信息
下面的就看不懂了。
我最后的解决办法是设置如下
char buf[513]
用的fgets(buf , 111 ,fp)
*** stack smashing detected ***: ./a.out terminated ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x4 [0xb7f3bda8] /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb7f3bd60] ./a.out[0x8048ad9] [0x63352563] ======= Memory map: ======== 08048000-08049000 r-xp 00000000 fc:00 302203 /root/a.out 08049000-0804a000 r--p 00000000 fc:00 302203 /root/a.out 0804a000-0804b000 rw-p 00001000 fc:00 302203 /root/a.out 0944b000-0946c000 rw-p 0944b000 00:00 0 [heap] b7df4000-b7e01000 r-xp 00000000 fc:00 73165 /lib/libgcc_s.so.1 b7e01000-b7e02000 r--p 0000c000 fc:00 73165 /lib/libgcc_s.so.1 b7e02000-b7e03000 rw-p 0000d000 fc:00 73165 /lib/libgcc_s.so.1 b7e08000-b7e3e000 rw-p b7e08000 00:00 0 b7e3e000-b7f9a000 r-xp 00000000 fc:00 73311 /lib/tls/i686/cmov/libc-2.9.so b7f9a000-b7f9b000 ---p 0015c000 fc:00 73311 /lib/tls/i686/cmov/libc-2.9.so b7f9b000-b7f9d000 r--p 0015c000 fc:00 73311 /lib/tls/i686/cmov/libc-2.9.so b7f9d000-b7f9e000 rw-p 0015e000 fc:00 73311 /lib/tls/i686/cmov/libc-2.9.so b7f9e000-b7fa1000 rw-p b7f9e000 00:00 0 b7fa4000-b7fa5000 rw-p b7fa4000 00:00 0 b7fa6000-b7fa8000 rw-p b7fa6000 00:00 0 b7fa8000-b7fa9000 r-xp b7fa8000 00:00 0 [vdso] b7fa9000-b7fc5000 r-xp 00000000 fc:00 73166 /lib/ld-2.9.so b7fc5000-b7fc6000 r--p 0001b000 fc:00 73166 /lib/ld-2.9.so b7fc6000-b7fc7000 rw-p 0001c000 fc:00 73166 /lib/ld-2.9.so bfeb1000-bfec6000 rw-p bffeb000 00:00 0 [stack] Aborted |
看了fgets的手册,还是没有找到原因。。
以后在总结了