c++中new和free可以结合使用吗?
如下例,我new一个char数组,使用free释放,会不会造成生成什么安全问题?
代码可以编译运行,谢谢各位大神指点。
char * ch = new char[10]; for (int i = 0; i < 10; i++) { ch[i] = '0' + i; } free(ch);
光阴似箭催人老,日月如移越少年。
new と delete はペアで使用する必要があり、malloc|free と混合することはできません。 の書き方は基本的な型では問題ないかもしれませんが、コンストラクターとデストラクターが一度に関与すると、いいえ、習慣を身につけることは非常に重要です。 また、標準ライブラリでは new を malloc を使用して実装する必要があるとは規定されていないようです。そのため、new 内の要素は依然として delete である必要があります。 free
new
delete
malloc|free
malloc
free
free を使用すると、新しいオブジェクトがデストラクターを実行できず、プログラム エラーが発生する可能性があります
このように使用することは推奨されません。new/delete と malloc/free を一緒に使用することは推奨されません。
C 標準では、新しいメモリ割り当てが malloc によって割り当てられることを要求していないため、一部の C 実装ではこれが行われますが、すべてではありません。さらに、新しい演算子はオーバーロードされ、カスタムのメモリ割り当てコードが作成される可能性があります。この場合、それは明らかに無料ではありません。また、新しいクラス オブジェクトの場合、デストラクターが呼び出されないため、free を呼び出すことはできません。
第一に: new と delete は、下部に malloc と free を使用して実装されます。第二に、基本的なデータ型の場合、delete と delete[] を混在させることができます。free を使用すると、スペースを解放することもできますnew で作成しましたが、new [] は使用できない場合があります重要な点は、これらを混合しないことが最善であるということです
new
とdelete
はペアで使用する必要があり、malloc|free
と混合することはできません。の書き方は基本的な型では問題ないかもしれませんが、コンストラクターとデストラクターが一度に関与すると、いいえ、習慣を身につけることは非常に重要です。
また、標準ライブラリでは
new
をmalloc
を使用して実装する必要があるとは規定されていないようです。そのため、new
内の要素は依然としてdelete
である必要があります。free
を使用することをお勧めしますdelete
free を使用すると、新しいオブジェクトがデストラクターを実行できず、プログラム エラーが発生する可能性があります
このように使用することは推奨されません。new/delete と malloc/free を一緒に使用することは推奨されません。
C 標準では、新しいメモリ割り当てが malloc によって割り当てられることを要求していないため、一部の C 実装ではこれが行われますが、すべてではありません。さらに、新しい演算子はオーバーロードされ、カスタムのメモリ割り当てコードが作成される可能性があります。この場合、それは明らかに無料ではありません。また、新しいクラス オブジェクトの場合、デストラクターが呼び出されないため、free を呼び出すことはできません。
第一に: new と delete は、下部に malloc と free を使用して実装されます。
第二に、基本的なデータ型の場合、delete と delete[] を混在させることができます。
free を使用すると、スペースを解放することもできますnew で作成しましたが、new [] は使用できない場合があります
重要な点は、これらを混合しないことが最善であるということです