2017-12-01 251 views
0

私はエラーが発生し、その関数を知って印刷することにより、自分のコードをテストした後、私は私のコードで不明なエラーが発生している:munmap_chunk():無効なポインタ(しばらく条件でエラー)

void clearTrainSet(){ 

     struct trainSet * curSet=trnHead; 
     struct trainSet * tmp; 
puts("z"); 
     while(curSet!=NULL){ 
puts("0"); 
       tmp=curSet; 
puts("1"); 
       curSet=curSet->next; 
puts("2"); 
       free(tmp->input); 
puts("3"); 
       free(tmp->output); 
puts("4"); 
       free(tmp); 
puts("x"); 
     } 
     trnHead=NULL; 
     if(filename!=NULL){ 
       free(filename); 
       filename=NULL; 
     } 
puts("c"); 
} 

プログラムテストした後結果は次のとおりです。

./neuromz -new 1 2 3 -name dsd 
Network initialized successfully. 
z 
*** Error in `./neuromz': munmap_chunk(): invalid pointer: 0x00007ffde363d2c0 *** 
Aborted (core dumped) 

あなたのコメントで述べたように、しばらくの条件

+0

どのように 'filename'を初期化しましたか? 'free'に渡す値は' calloc'、 'malloc'または' realloc'によって返されましたか? – babon

+0

私は自分のコードを修正してくれてありがとう、その問題は、 'filename = argv [i]'という引数でプログラム 'malloc'の中で2つの方法でfilenameを使うことでした。 –

答えて

0

の誤差は、あなたがfree WHIに、このようなポインタを渡したことは明らかですchはmalloc,callocまたはreallocで返されませんでした。これによってUBが呼び出されます(実際には、IMO、セグメンテーションフォルトを取得することは非常に幸運でした。worseでした)。

無料()関数は)メモリ空間が malloc関数への前の呼び出し(で返されていなければならないptrが解放し、のcalloc()または のrealloc:これはmanページを約void free(void *ptr);を言うことです()。それ以外の場合、またはfree(ptr)がすでに呼び出されている場合は、 未定義の動作が発生します。 ptrがNULLの場合、操作は実行されません。

関連する問題