我创建了以下函数来获取Date Time字符串:
char *GetDateTime (int Format)
{
if (Format > 2) Format = 0;
double DateTimeNow;
int BufferLen;
char *DateTimeFormat [3] = { "%X %x" , //Time Date
"%x" , //Date
"%X" }; //Time
char *DateTimeBuffer = NULL;
GetCurrentDateTime (&DateTimeNow);
BufferLen = FormatDateTimeString (DateTimeNow, DateTimeFormat [Format], NULL, 0);
DateTimeBuffer = malloc (BufferLen + 1);
FormatDateTimeString (DateTimeNow, DateTimeFormat [Format], DateTimeBuffer, BufferLen + 1 );
return DateTimeBuffer;
}
我没有免费使用DateTimeBuffer'因为我需要传递其内容。我想知道那个记忆是否清除了。请帮忙。
答案 0 :(得分:4)
它并不清楚。您必须在调用者函数中调用free
,或者在上次访问内存的任何地方调用它。
示例:
char *dateTimeBuffer = GetDateTime(1);
.
.
/* do stuff with dateTimeBuffer */
.
.
/* you don't need dateTimeBuffer anymore */
free(dateTimeBuffer);
每当您使用malloc
时,您必须手动free
,但当您退出其所在的范围时,例如在您的GetDateTime()
函数中,将自动清除在堆栈上分配的内存函数返回时将自动清除{1}}。
答案 1 :(得分:2)
在C中,没有任何事情会自动发生。您malloc
的每个对象以后必须使用free
清除。由于您从函数返回DateTimeBuffer
,因此数据的接收器应处理缓冲区,然后free
。请务必对此功能进行彻底评论。
答案 2 :(得分:1)
不,分配有malloc
的每个区域都应由free
明确释放;如果你不这样做,你可能会有内存泄漏。在大多数操作系统上,当一个进程终止时,它的所有地址空间都被释放(所以如果你没有free
内存,它就会随着它的地址空间而消失)
答案 3 :(得分:1)
char *DateTimeBuffer
这是函数的本地指针。因此,当您从函数返回时,在您使用
之前,将不会释放分配的内存free(DateTimeBuffer);
但是由于内存是在堆上分配的,因此您可以返回在函数外部仍然有效的位置的地址。使用后分配的内存应使用free()
答案 4 :(得分:1)
不,它不清楚。 malloc
函数将从堆中请求一块内存。您必须将 malloc
返回的指针传递给不再需要的 free
函数,以释放内存以便可以使用它用于其他目的。