栈内存、堆内存一个错误使用的例子,
函数
char * DouToChar(double i)
{
char buffer[100];
sprintf(buffer,"%.1f",i);
return buffer;
}
调用
cout<<DouToChar(100.00)<<end;
会输出一堆乱序或者空白,原因在于char buffer[100]是栈内存在函数结束后被自动回收
char * DouToChar(double i)
{
char* buffer;
buffer=new char[100];
sprintf(buffer,"%.1f",i);
return buffer;
}
会输出100.0,原因在于是堆内存,但是会不断申请内存需要手动delete,如果忘记了就又可能会出现内存错误造成内存泄露。
void DouToChar(double i,char* buffer)
{
sprintf(buffer,"%.1f",i);
}
最好是自己输入一个char*;可能有更好的解决办法想到再补充。
一句话写个函数是多此一举了,是个愚蠢的操作。