为什么这会给我一个内存错误?
char* aVar= new char;
itoa(2, aVar, 10);
delete aVar;
itoa
会删除aVar
吗?如何知道C ++函数是否删除指针,是否存在约定?
如果我这样做,则不会发生错误:
char* aVar= new char;
delete aVar;
答案 0 :(得分:4)
itoa
需要足够长的数组来保存整个值加上结尾的空字符。
在你的情况下,你需要分配至少2个字符,否则最后的空字符落在未分配的内存上。
对于纯C,sprintf
应该是更便携的解决方案:
char aVar[2];
sprintf(aVar, "%d", 2);
(根据文档,itoa
并非普遍适用。
如果您使用的是C ++,更好的方法是使用字符串流。请参阅此问题:Alternative to itoa() for converting integer to string C++?进行讨论。