2

delete と delete [] の違いは明確だと思います。ここで質問したいのは、タイプミスがあり、間違ったものを使用することがあります。その後、クラッシュする場合とクラッシュしない場合があり、通常は何時間ものデバッグが必要になります。

いくつかの最も単純なケースで、gcc が誤用の可能性を検出して警告できることを願っています。レガシー関数を呼び出す必要があるため、「new float[size]」を時々使用する必要があるため、これらの間違いの一部を検出するエラー チェック ツールを見つけることに関心があります。

4

2 に答える 2

4

gcc がいくつかの最も単純なケースで誤用の可能性を検出して警告できることを願っています。

valgrindを使用します。

new float[size]呼び出す必要があるレガシー関数のため、時々使用する必要があります

いいえ、あなたはしません。レガシー関数が float の配列の最初の要素へのポインターを必要とする場合は、次のようにします。

std::vector<float> numbers(10);
legacy_func(&numbers[0]);

これをしないでください:

float *numbers = new float[10];
legacy_func(numbers);
delete[] numbers;
于 2012-08-16T22:09:35.063 に答える
0

フロートをに入れてから、またはそれらのレガシー関数にstd::vector<float>渡すことができる場合があります。これが標準で機能することが保証されているかどうかはわかりませんが、一般的な実装で機能するはずです。front()&front()

C ++ 11ライブラリをサポートしsizeていて、コンパイル時にstd::array<float, size>認識されている場合は、より効率的です。

于 2012-08-16T21:59:03.747 に答える