我想了解從函數調用返回指針的行爲。假設我有以下簡單的代碼:在返回語句之前瞭解空閒()緩衝區
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
這是不正確的代碼。它會導致腐敗。這似乎是免費的錯誤後使用 –