いくつかのsegfaultの例を試していますが、どれもエラーを引き起こしていません。セグメンテーションフォルトセグメンテーションフォールトを与えない例
からソースコード:http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html
例は以下の通りです:
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> gcc -g segfault.c
今、私たちは、プログラムを実行します:
prompt > ./a.out
Hello World!
Segmentation fault
prompt >
ただし、上の例は私のUbuntuでsegfaultなしで実行しています。私はgccオプションに関連するものだと思っていますが、これを引き起こしているものは見つけられませんでした。別のディストリビューションで実行すると、問題が発生します。
これは私の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が自動的に変数を初期化しています。私はそれを無効にしたい。
誰も同じような問題に直面したのですか、解決策についてご意見がありましたか?
は '/ a.out'を試してみてくださいことはできますか? (try 'which a.out') – wildplasser
私は./a.outを実行しています。コードは完璧に動作しています。 – user1348438
あなたの例は、メモリ割り当てに失敗したために 'segfault'に依存しています。 'malloc'の後に' buf'を指す点でチェックしてください。 'printf("%p \ n "、buf);' 'malloc'の直後の出力はどうですか? –