webForumDet fria alternativet

Varför inget läckage?

C/C++ur C/C++

5 svar · 270 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#1

Förstår inte riktigt varför jag inte får göra free på tmp variabeln i detta C program,

int main(int argc, char *argv[])
{
	char *date=getCurrentDate();
	printf("%s\n",date);
	free(date);
	return(0);
}

char* getCurrentDate()
{
	[B]struct tm *tmp;[/B]
	char *date=malloc(sizeof(char)*20);
	time_t ttime;
	ttime=time(NULL);
	tmp=localtime(&ttime);
	strftime(date, 20, "%Y-%m-%d", tmp);
	return(date);
}

den är deklarerad som en pekare och tar emot en pekare från localtime, men om jag försöker göra free på den så får jag "Segmentation fault" och om jag låter den vara så fungerar allt ok och jag har inget minnes läckage, men varför?? Är det inte min uppgift att ta bort alla pekare som hjälp funktioner retunerar till mig?

/Viktor

Medlem sedan juni 20008 205 inlägg
#2

Det som returneras från localtime är en pekare till statiskt allokerat minne (man localtime ;) ), så det ska inte freeas.

Medlem sedan aug. 20021 752 inlägg
#3

Där ser man :)

/Viktor

Medlem sedan juli 2002581 inlägg
#4

date borde väl fortfarande behöva frigöras.

Medlem sedan maj 20018 027 inlägg
#5

Sang-drax skrev:

date borde väl fortfarande behöva frigöras.

date frigörs i main().

Medlem sedan juli 2002581 inlägg
#6

Ja, och jag fattade det som att det var det som inte gick att göra.
Så var dock inte fallet.

136 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)