몇 가지 segfault 예제를 시도하고 있지만 그 중 아무 것도 오류의 원인이 아닙니다.세그먼트 오류 세그먼트 오류를 제공하지 않는 예
소스 코드에서 : http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html
예 않습니다 :
이prompt> gcc -g segfault.c
이제 우리는 프로그램을 실행 :
1 : #include <stdio.h>
2 : #include <stdlib.h>
3 : int main(int argc, char **argv)
4 : {
5 : char *buf;
6 :
7 : buf = malloc(1<<31);
8 :
9 : fgets(buf, 1024, stdin);
10: printf("%s\n", buf);
11:
12: return 1;
13: }
첫 번째 단계는 디버깅 플래그와 함께 프로그램을 컴파일하는 것입니다 :
prompt > ./a.out
Hello World!
Segmentation fault
prompt >
그러나 위 예제는 내 우분투에서 segfault없이 실행 중입니다. 나는 gcc 옵션과 관련이 있다고 생각하지만,이 문제의 원인을 찾을 수 없었다. 다른 배포판에서 실행하면 문제가 발생합니다.
$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5.1'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--enable-multiarch --enable-linker-build-id --with-system-zlib
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls
--enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc
--enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic
--enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu
--target=i486-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
내 GCC는 자동으로 초기화 변수 :
이
내 GCC의 출력입니다. 나는 그것을 해제하고 싶다.비슷한 문제가 있거나 솔루션에 대해 알고있는 사람이 있습니까?
당신은'시도해야 수/a.out'? (try'which a.out') – wildplasser
나는 ./a.out을 실행 중이다. 코드가 완벽하게 작동합니다. – user1348438
당신의 예제는 메모리 할당 실패로 인한'segfault'에 달려 있습니다. 'buf'가'malloc' 다음에 오는 지 확인하십시오. 'printf ("% p \ n", buf);''malloc' 바로 다음의 결과는 무엇입니까? –