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