私はC++で新しいと削除を使うべきだと知っていますが、なぜmallocを使うのは良い考えですか?解放されたポインタは、reallocとmallocでコンストラクション関数に割り当てられませんでした。
答えて
According to the documentation、
realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));
はdataPoolBuffer
を再割り当てしますが、どこdataPoolBuffer
ポイントは変更されません。だから、dataPoolBuffer
が現在無効なメモリを指しているというオッズはかなり良いです。
dataPoolBuffer = (char*)realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));
あなたがしたいことをやり遂げますが、どのようにこれをやっているのか考え直してください。あなたは多くの痛みのために自分自身を設定しています。 Your class violates The Rule of Three, for one thing.std::vectorは、あなたのためのコンテナのサイズ変更とメモリ管理をすべて扱います。
私は "ataPoolBuffer = realloc(dataPoolBuffer、sizeof(char)*(dataPoolSize));"を試みました。 Xcodeでは、互換性のない型 'void'から 'char *'に代入しています。 – beasone
@beasone良い点。私はこのギャグが正当なCに落ちた。余分なキャストが必要です。修正する。 – user4581301
realloc()
を呼び出すときは、ポインタ変数に結果を戻す必要があります。 realloc()
はしばしばメモリを新しい場所に移動する必要があり、その場所を返します。あなたのコードは、変数が古い場所を指し示しているままになり、その後にそれを使用しようとすると未定義の動作が発生します。
だから、それは次のようになります。
dataPoolBuffer = (char*)realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));
flagBuffer = (char*)realloc(flagBuffer, sizeof(char)*(dataPoolSize));
- 1. "解放されたポインタは割り当てられませんでした。" malloc、reallocの
- 2. "解放されたポインタが割り当てられていません"
- 3. ダブルリンクリストでエラーが発生しました '解放されたポインタが割り当てられていません'
- 4. コンストラクタが呼び出されず、 "解放中のポインタが割り当てられませんでした"エラー
- 5. initWithBitmapDataを呼び出すとMallocポインタが解放されませんでした
- 6. Mallocポインタが解放されていませんでした - Ionic1 + cordova-plugin-wkwebview-engine
- 7. 解放されたポインターが割り当てられていたにもかかわらず割り当てられていませんでした
- 8. Mallocポインタが解放されていません
- 9. mallocは割り当てられたメモリへのポインタを返す
- 10. エラー: "ポインタが解放されていませんでした。"
- 11. ダイナミックに割り当てられた変数をSIGTERMで解放するには?
- 12. C - 解放されているポインタが割り当てられていない
- 13. newCStringで割り当てられたメモリを解放する
- 14. 他のポインタから割り当てられたメモリを解放することはできますか?
- 15. delete []ポインタへのポインタによって割り当てられたメモリを解放します
- 16. UDDTIO読み取り:ポインタが割り当てられていない解放さ
- 17. 割り当て解除インスタンスに送信された解放メッセージが、インスタンスのポインタは、ここではnil
- 18. realloc()の後のセグメンテーションフォルト。割り当てられたメモリをポインタに割り当てることができません
- 19. 静的に割り当てられたnsarrayの解放
- 20. 二重ポインタは関数内でmallocされません
- 21. 配列に文字列を追加すると、reallocされたポインタが割り当てられませんでした
- 22. Freeはva_argリストとして送信されたポインタを解放しません
- 23. SWIGでカスタムコンストラクタに割り当てられたメモリを解放するには?
- 24. c:割り当てられたオブジェクトのエラーを解放する
- 25. 割り当てられたポインタのStrlen()
- 26. Javaで割り当てられたオブジェクトを解放するには?
- 27. 最近解放されたメモリの割り当て
- 28. C関数から返されたCポインタをFortranに解放しますか?
- 29. 関連付けられたポインタまたは変数なしでスタックに格納された整数の割り当て解除
- 30. ポインタと動的に割り当てられた配列は
ここで間違っていることがたくさんあります。私はどこから始めたらいいのか分かりません。サイズが0のmallocです。 C++コードで 'malloc'と' free'を使います。最初は不必要な動的割り当てです。リストはちょっと変わっていません。 –
mallocを1のサイズで修正しても、それでもエラーmsgが表示されます。 C++はCスタイルと互換性があります。なぜそれをC++で使うことができないのですか? – beasone
私は 'realloc'を使う理由を理解しています。しかし、クラスのコンストラクターでミューテックスを誤ってラッチしていると考えられる理由を知りたいのですが、同じことがインスタンスメンバー変数だけを変更しています。あなたは、複数のスレッドが同じオブジェクトを同時に構築することを期待していますか?あるいは、あなたが 'add'メソッドのようにラッチされていると思いますが(あなたのやっている方法ではない)、mutexを無視していると思います。あなたの所見を再現する必要がない場合は、あなたの投稿でそれを取り除く。 – WhozCraig