Jag har ett C-program som jag körde på en Ubuntu 8-server. Nu har jag flyttat över (och komplierat om) programmet till en Ubuntu 14.4-server så får jag plötsligt fel i programmet. Efter att ha tagit bort allt oväsentligt så fick jag kvar följande kod:
Kod: Markera allt
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
double difftimet(t1,t2)
struct tm *t1,*t2;
{
time_t tt1, tt2;
tt1=mktime(t1);
tt2=mktime(t2);
return difftime(tt1,tt2);
}
main()
{
struct tm timemes, timeper;
timeper.tm_year=0;
// timeper.tm_mon=10;
// timeper.tm_mday=13;
// timeper.tm_hour=21;
// timeper.tm_min=0;
// timeper.tm_sec=0;
timemes.tm_year=2014;
timemes.tm_mon=10;
timemes.tm_mday=13;
timemes.tm_hour=21;
timemes.tm_min=0;
timemes.tm_sec=0;
printf("<1: %f, %d>\n",difftimet(&timeper,&timemes),timeper.tm_year);
printf("<2: %f, %d>\n",difftimet(&timeper,&timemes),timeper.tm_year);
}
"difftimet" används för att visa skillnaden i sekunder mellan de båda variablerna. Det gör inte mig något att funktionen ger ett "slumpmässigt" värde beroende på innehållet i de oinitierade variablerna.
Det konstiga i det hela är dock att "timeper.tm_year" byter värde när jag kör "difftimet".
Kod: Markera allt
ie@jupiter:~/c/test$ ./logtest
<1: -61498523684.000000, 0>
<2: -61498523684.000000, 66>
Det räcker med att jag initierar "timeper.tm_sec" för att det ska fungera som förväntat (kom jag på efter några timmar).
Har svårt att förstå "att minne skrivs över" (eller vad det nu är för fel), bara för att en variabel är oinitierad.