Ито удаляет символ?

Почему это дает мне ошибку памяти?

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

Есть ли itoa удалить aVar? Как узнать, если функция C++ удаляет указатель, есть ли соглашение об этом?

Если я сделаю это, то ошибка не произойдет:

char* aVar= new char;
delete aVar;

1 ответ

itoa нужен массив достаточно длинный, чтобы содержать все значение плюс нулевой символ в конце. В вашем случае вам нужно выделить как минимум 2 символа, в противном случае нулевой символ в конце попадает в нераспределенную память.

Смотрите документацию по Итоа.

Для чистого C, sprintf должно быть более портативным решением:

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

(как itoa, согласно документации, не является общедоступной).

Если вы используете C++, лучше всего использовать строковый поток. Смотрите этот вопрос: Альтернатива itoa() для преобразования целого числа в строку C++? для обсуждения.

Другие вопросы по тегам