Ито удаляет символ?
Почему это дает мне ошибку памяти?
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++? для обсуждения.