C-strul, löst efter några timmar...
Postat: 13 oktober 2014, 23:10:40
Råkade ut för något märkligt idag...
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:
Som synes så tilldelar jag inte några värden till ett antal members i den första structen. Det var avsiktligt då jag utnyttjade "timeper.tm_year=0" som en flagga för att visa att variablen inte var satt ännu.
"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".
Som synes visar "difftimet" samma resultat båda gångerna men värdet i variabeln "timeper.tm_year" har ändrats. Värdet - 66 i detta fall - är samma vid varje körning men blir något annat vid en ny kompilering.
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.
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.