例如:
char *doubleToString(double value, int force_f)
{
size_t bufferSize = 256;
//char *buffer = (char*)malloc(bufferSize);
char buffer[256];
if (force_f == 1)
snprintf(buffer, bufferSize, "%f", value);
else
snprintf(buffer, bufferSize, "%g", value);
return(buffer);
}
buffer应该是在栈内存上,函数结束时该变量应该消失,但是buffer怎么还会返回正确值??
因为这块内存中的数据还没被及时清理掉
malloc申请的内存位于堆上,不会自动释放;buffer指向这块内存的地址;函数结束时,将buffer指向的这块内存的地址传了出去,然后buffer消失。即,你所申请的内存地址没有被释放掉,所以可用。
我把函数第二行注释掉了,用的是数组 buffer[256] 返回的值,我认为应该是这块内存中数据没有及时清理掉。
@町町独立: 内存数据不会自动清理,只有可能被手工清理或被其他内存操作所覆盖