検索

ホームページ  >  に質問  >  本文

c++中new分配的内存能否使用free释放?

c++中new和free可以结合使用吗?

如下例,我new一个char数组,使用free释放,会不会造成生成什么安全问题?

代码可以编译运行,谢谢各位大神指点。

char * ch = new char[10];
for (int i = 0; i < 10; i++) 
{
    ch[i] = '0' + i;
}
free(ch);
大家讲道理大家讲道理2828日前850

全員に返信(5)返信します

  • 阿神

    阿神2017-04-17 14:32:10

    newdelete はペアで使用する必要があり、malloc|free と混合することはできません。
    の書き方は基本的な型では問題ないかもしれませんが、コンストラクターとデストラクターが一度に関与すると、いいえ、習慣を身につけることは非常に重要です。
    また、標準ライブラリでは newmalloc を使用して実装する必要があるとは規定されていないようです。そのため、new 内の要素は依然として delete である必要があります。 free

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:32:10

    delete

    を使用することをお勧めします

    free を使用すると、新しいオブジェクトがデストラクターを実行できず、プログラム エラーが発生する可能性があります

    返事
    0
  • 迷茫

    迷茫2017-04-17 14:32:10

    このように使用することは推奨されません。new/delete と malloc/free を一緒に使用することは推奨されません。

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 14:32:10

    C 標準では、新しいメモリ割り当てが malloc によって割り当てられることを要求していないため、一部の C 実装ではこれが行われますが、すべてではありません。さらに、新しい演算子はオーバーロードされ、カスタムのメモリ割り当てコードが作成される可能性があります。この場合、それは明らかに無料ではありません。また、新しいクラス オブジェクトの場合、デストラクターが呼び出されないため、free を呼び出すことはできません。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:32:10

    第一に: new と delete は、下部に malloc と free を使用して実装されます。
    第二に、基本的なデータ型の場合、delete と delete[] を混在させることができます。
    free を使用すると、スペースを解放することもできますnew で作成しましたが、new [] は使用できない場合があります
    重要な点は、これらを混合しないことが最善であるということです

    返事
    0
  • キャンセル返事