私ははcalloc(でクラッシュした下記のようにCのコードの一部を持ってクラッシュ:のcallocの呼び出しが失敗し、以下のコードは、呼び出し)
... some code
free (ipl->fldptr);
ipl->fldptr = calloc (flds*4, sizeof(struct fldptr_type));
...some more code
が、私はそれをgdbをしようとした私は、クラッシュ時に下記のバックトレースを取得します:
Program received signal SIGSEGV, Segmentation fault.
0x0000003ade478f94 in _int_malloc() from /lib/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.7.el6.x86_64 libgcc-4.4.4-13.el6.x86_64 libstdc++-4.4.4-13.el6.x86_64
(gdb) bt
#0 0x0000003ade478f94 in _int_malloc() from /lib/libc.so.6
#1 0x0000003ade4796d8 in calloc() from /lib/libc.so.6
#2 0x0000000000daf00d in myfunction (ipl=0x106f75f0, flds=11)
at myfile.c:1286
デバッグの一環として、私はgdbのプロンプトで次のように実行します。そのユーザーコードのスタックフレーム と変数のプリント値(FLDS、ポインタ(IPL)に行くことに
フレーム2と、彼らはOK思えませんN明らかにULL逆参照。
しかし、まだcalloc()は失敗し、そこでクラッシュします。このコードは以前は複数回正常に実行されていましたが、アプリケーションがしばらく実行された後にクラッシュします。 (メモリリーク?tryintのvalgrindを実行するには、valgrind memcheckツールで実行すると、コードクラッシュの動作が繰り返されません。)
私はデバッグや修正に役立ついくつかのポインタを探していますこの。
関連情報 - gcc:4.4.4。 Red Hat Enterprise Linuxサーバー6.0 64ビットLinux
おそらく、ヒープを破損し、* alloc()内部データ構造を破壊している可能性があります。このようなエラーを見つけるより簡単な方法は、あなたのプログラムを 'valgrind'を通して実行することです。 – FatalError