我想了解从函数调用返回指针的行为。假设我有以下简单的代码:在返回语句之前了解空闲()缓冲区
int main(){
int i;
float *ssd;
ssd = test();
for (i = 0; i < 3; ++i) {
printf("%f, ", ssd[i]);
}
printf("\n \n");
memset(ssd, 0.0, 3*sizeof(float));
for (i = 0; i < 3; ++i) {
printf("%f, ", ssd[i]);
}
printf("\n \n");
}
float *test(){
float *buff = malloc(3* sizeof(float));
int i;
for (i = 0; i < 3; ++i) {
buff[i] = (float) (6.31 + i);
}
free(buff);
return buff;
}
正如你看到的,我创建了一个临时缓冲区内buff
test()
。在我回来之前,我在return
声明之前释放了buff
。尽管我测试了它并且结果如预期,但我不明白test()
函数如何返回buff
值,即使free(buff)
在return
之前buff?
相关:http://stackoverflow.com/q/6441218/509868 – anatolyg
没有与不确定的行为一个C程序是不可能的。 – PSkocik
这是不正确的代码。它会导致腐败。这似乎是免费的错误后使用 –