我应该释放()用于存储realloc()结果的临时指针吗?
Should I free() the temporary pointer used to store the result of a realloc()?
所以这是在 x86 机器上 运行 基于 Debian Linux OS。我有以下函数,它被调用了很多次。我不确定我是否应该 free()
temp
指针,或者我可以让函数保持原样。
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;
}
由于您使用 realloc
(不仅仅是 malloc
),所以看起来 Data
已经分配到其他地方,大概是在调用 my_function
的函数中。为了预先消除任何误解,Data = temp;
赋值不会将从 realloc
获得的 temp
的 更新 值传递回调用者,因为 char *Data
按值传递。
现在进入实际问题。调用者 是否期望 my_function
释放 Data
缓冲区?如果 realloc
失败,则代码似乎是 free
'ing。如果是这样,它可能也应该 free(temp);
如果 realloc
成功。
[ 编辑 ] 为了强调@mksteve 在评论中提出的观点,一旦 realloc
在 my_function
中成功,temp
指针不再一定等于原始 Data
,并且原始 Data
指针不再符合 free
的条件,因为它可能指向此时已释放的数据。由于重新分配的 temp
指针 未 传递回调用函数,因此调用者在 my_function
之后尝试 free(Data)
是非法的 returns.
总的来说,在开始(重新)分配它们的同一级别释放它们总是更安全。依赖调用者分配和被调用者处置是有风险的业务,原因不仅仅是这个例子。
所以这是在 x86 机器上 运行 基于 Debian Linux OS。我有以下函数,它被调用了很多次。我不确定我是否应该 free()
temp
指针,或者我可以让函数保持原样。
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;
}
由于您使用 realloc
(不仅仅是 malloc
),所以看起来 Data
已经分配到其他地方,大概是在调用 my_function
的函数中。为了预先消除任何误解,Data = temp;
赋值不会将从 realloc
获得的 temp
的 更新 值传递回调用者,因为 char *Data
按值传递。
现在进入实际问题。调用者 是否期望 my_function
释放 Data
缓冲区?如果 realloc
失败,则代码似乎是 free
'ing。如果是这样,它可能也应该 free(temp);
如果 realloc
成功。
[ 编辑 ] 为了强调@mksteve 在评论中提出的观点,一旦
realloc
在 my_function
中成功,temp
指针不再一定等于原始 Data
,并且原始 Data
指针不再符合 free
的条件,因为它可能指向此时已释放的数据。由于重新分配的 temp
指针 未 传递回调用函数,因此调用者在 my_function
之后尝试 free(Data)
是非法的 returns.
总的来说,在开始(重新)分配它们的同一级别释放它们总是更安全。依赖调用者分配和被调用者处置是有风险的业务,原因不仅仅是这个例子。