所以這是在x86機器上運行基於Debian的Linux操作系統。我有以下被稱爲很多次的功能。我不知道如果我應該free()
temp
指針或我可以只是讓它的功能。我應該釋放()用於存儲realloc()結果的臨時指針嗎?
int my_function (char *Data, int Data_size) {
void *temp;
Data_size = 7000;
// Allocate a huge array to store a line of the datalogger
//
temp = (char *) realloc(Data, Data_size);
if (temp == NULL)
{
printf("Reallocate Data ERROR\n");
free(Data);
return -1;
}
Data = temp;
// Do something with the Data
return 1;
}
你不應該。 'free()'用於告訴操作系統您不再使用具有給定地址的內存。既然你把這段內存給了「數據」,你就不應該釋放它。但是當你在程序的某個部分停止使用「Data」時,你應該調用'free()'。 – TomTsagk
嘿,謝謝。所以如果我在函數內部使用'Data'並且不再需要它,我應該在離開函數之前釋放(Data)和free(temp)? –
數據是一個指針,temp也是一個指針,它們指向同一塊內存,所以你不需要釋放它們兩個。當函數結束時,temp將被銷燬,但它所指向的數據將在內存中保持活動狀態。由於Data指向的是內存塊,因此只有在完成使用'Data'時,才應該調用'free()'。 – TomTsagk