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

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

1 голос
/ 25 октября 2010

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

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

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

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

char* aVar= new char;
delete aVar;

1 Ответ

4 голосов
/ 25 октября 2010

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

См. Документацию по Италии .

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

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

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

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

...