1

これによりメモリエラーが発生するのはなぜですか?

char* aVar= new char;
itoa(2, aVar, 10);
delete aVar;

itoaを削除しaVarますか? C++関数がポインタを削除するかどうかを知る方法はありますか?それについての規則はありますか?

これを行うと、エラーは発生しません。

char* aVar= new char;
delete aVar;
4

1 に答える 1

4

itoa値全体と最後にヌル文字を保持するのに十分な長さの配列が必要です。あなたの場合、少なくとも2文字を割り当てる必要があります。そうしないと、最後のヌル文字が未割り当てメモリに落ちます。

itoaのドキュメントを参照してください。

純粋な C のsprintf場合、より移植性の高いソリューションにする必要があります。

char aVar[2];
sprintf(aVar, "%d", 2);

itoaドキュメントによると、は普遍的に利用できるわけではないため)。

C++ を使用している場合、より良い方法は文字列ストリームを使用することです。この質問を参照してください:整数を文字列 C++ に変換するための itoa() の代替? 議論のために。

于 2010-10-24T22:53:56.703 に答える