为什么会出现内存错误?
char* aVar= new char;
itoa(2, aVar, 10);
delete aVar;itoa会删除aVar吗?如何知道C++函数是否删除了指针,这方面有什么约定吗?
如果我这样做了,那么错误就不会发生:
char* aVar= new char;
delete aVar;发布于 2010-10-25 06:53:57
itoa需要足够长的数组来保存整个值加上末尾的空字符。在您的示例中,至少需要分配2个字符,否则最后的空字符将落在未分配的内存上。
请参阅documentation on itoa。
对于纯C语言,sprintf应该是一个更可移植的解决方案:
char aVar[2];
sprintf(aVar, "%d", 2);(根据文档,itoa并不是普遍可用的)。
如果您使用的是C++,更好的方法是使用stringstream。有关讨论,请参阅此问题:Alternative to itoa() for converting integer to string C++?。
https://stackoverflow.com/questions/4010891
复制相似问题