2011-11-14 6 views
1

私のコードを実行すると、セグメンテーションフォールトがあります。 私は私のコードをトレースし、以下のエラーコードを検索するためにGDBを使用します。より多くのだ非常に奇妙なセグメンテーションフォールト私は新しいスペースを

(gdb) 
30  wgt_indx_src = new int [num_wgts]; 

(gdb) 

Program received signal SIGSEGV, Segmentation fault. 
0x0000003735e7201e in _int_malloc() from /lib64/libc.so.6 

何、num_wgtsは、私の場合は41472です。私はそれが12398よりも小さい場合はそれを試みますが、それは12399として設定すると、sefmentation faultが存在します。

私はvalgrindのを使用し、以下の結果が得られます。私は最後の2行が

同じ命令を意味するかどうか尋ねるしたいですか?

==19944== Invalid free()/delete/delete[] 
=19944== at 0x4A04DAC: operator delete[](void*) (vg_replace_malloc.c:256) 
==19944== by 0x4039C1: main (main.C:137) 
==19944== Address 0x4C36030 is 0 bytes inside a block of size 65,536 free'd 
==19944== at 0x4A04DAC: operator delete[](void*) (vg_replace_malloc.c:256) 
=19944== by 0x4032FB: grid::~grid() (grid.C:208) 
==19944== by 0x403929: main (main.C:127) 
+1

あなたはおそらく、プログラム内のどこかでヒープを破壊しました。これは、 'malloc'のオブジェクトの境界を書きとめているためです。 – japreiss

+0

@japreiss: "wgt_indx_src"は定義されていて使用されていないと確信しています。 – xunzhang

答えて

2

同じオブジェクトを2回削除しています。
まず中:

grid::~grid() (grid.C:208) 

とでdelete []に呼び出し、その結果、コードの文によって、第2の時間:二度同じオブジェクトを削除

main.C:137 

未定義の動作をもたらし、あなたのヒープが破損。

私たちにあなたのmain()のコードを教えてください。特に、127から137までのコードです。

5

valgrindで実行しようとしましたか?あなたがメモリ破損している場合、破損の時間とエラーの時間は、しばしば離れていることがあります。

踏みつぶされた構造はめったにありません。あなたがその構造を使用しようとするまで、すべてがうまくいくでしょう。ほとんどの場合、あなたのコードでは、以前はメモリの問題があったでしょう。

関連する問題