ここには malloc/free と new/delete の優れた比較があり、malloc() と free() がどのように機能するかについてはここに説明があります。明らかに、それらを混在させてはなりません。free を new で使用するか、delete を malloc で使用してください。
上記の「混合禁止」ルールを尊重しながら、これらのメカニズムの両方を使用して、多くの貢献者がいる多くのオープンソース プロジェクトを見ることができます。通常、1 つのファイルには 1 つの方法しかありません (1 人の作成者、1 つの設定)。私はそのようなプロジェクトをフォークし、新規/削除を使用していくつかの機能を追加しています。しかし、奇妙なメモリ破損に遭遇します。もちろん責任はあると思いますが……。
それは私にいくつかの「素朴な」質問をするように導きます:
同じコンパイル単位 (*.o) に malloc/free と new/delete の両方のメカニズムを含めることはできますか?
このコードのように、2 つのメカニズムをインターリーブできますか?
int *a = (int *) malloc (1000 * sizeof int); int *b = new int[1000]; // some code free a; delete[] b;