私は複数のバッファを使用するC++プログラムで作業していますが、プログラムを実行するには数分のエラーが発生します。私はそれについて正しい方法を確信しています。私は私に障害を与えていると思うのコードは次のような現在:Mallocと複数のポインタを解放する
int *myBuf1, *myBuf2;
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = myBuf1;
// do work
if(myBuf1) {
free(myBuf1);
}
myBuf1 = NULL;
myBuf2 = NULL;
私の最初の質問は次のとおりです。代入「myBuf2 = myBuf1」で、はsizeof(int型)で、メモリの異なるブロックを割り当てるmyBuf2ん* maxPacketSize、またはそれはmyBuf1によって割り当てられた同じメモリブロックへのポインタですか?
次に、myBuf2とmyBuf1を解放してから、両方をNULLに設定する必要がありますか?私はmyBuf1だけを解放しています。または、それを行うのが最善でしょうか:
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = (int*)malloc(sizeof(int) * maxPacketSize);
無料ですか?
これはC++よりもCに見える – Pubby
なぜC++で 'malloc'と' free'を使用していますか? segfaultがどこから来ているのか分かりませんか? gdbでアプリケーションを実行します。クラッシュの原因となっている関数を見つけるには 'bt'を使います。変数を監視する。 'free'の前のチェックは役に立たない。さもなければ、問題は '仕事をする'になければなりません。表示するコードは重大な問題ではありません。 – pmr
コンパイラの警告をオンにしてください。コンパイラが間違っていることを知らせる前に何が間違っているかを伝えると、事がより簡単になります。 –