Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

1

26.03.2014, 09:14

C time_h Zeitberechnung ist bei Visual Studio verbuggt

Hallo,

ich und mein Kommilitone arbeiten gerade an einem Beleg.

Er hat eine Funktion zur Berechnung der Anzahl der Tage eines Monats entworfen.

Lustigerweise funktioniert die Funktion bei ihm unter Netbeans und Dev C++ bei mir aber unter Visual studio 2013 Ultimate wird gesagt der Speicher an der Stelle... ist nicht vorhanden.

hier einmal die Funktion.






Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int main()
....
    int y = 2014;
    int m = 2;
    int d = 1;
    time_t t;
    int i = 0, mDay = 0;
    while (i == mDay) { //solange  beide gleich sind, d.h., wenn mDay der erste des nächsten monats wird, dann unterbricht die schleife 
        struct tm *ts;
    
        ts = &ts;
        ts = localtime(&t);
        ts->tm_year = y - 1900;
        ts->tm_mon = m - 1;
        mDay++;
        ts->tm_mday = mDay;
        ts->tm_hour = 0;
        ts->tm_min = 0;
        ts->tm_sec = 1;
        t = mktime(ts); //mit hilfer der angepassten srucktur, die sek seit 1970 berechnen
        ts = localtime(&t); //wieder struktur erstellen, damit mday sich anhand der eingegebenen daten verändert
        mDay = ts->tm_mday;
        //printf("Monatstag: %d\nI: %d\n", mDay, i);
        i++;
    }
        printf("Der 1. Februar 20114 hat: %d  Tage" , i);


Hat jemand eine Idee woran es liegen könnte. &t und &ts zeigen anscheinend nirgendswohin bzw. die Werte an den stellen werden mit "Speicher kann nicht gelesen werden" kommentiert.
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

26.03.2014, 09:23

C-/C++-Quelltext

1
2
3
        struct tm *ts;
    
        ts = &ts;


Wtf? Wobei das in der nächsten Zeile eh wieder überschrieben wird.
Aber das kompiliert überhaupt als C++ Code?!
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

3

26.03.2014, 09:27

Ja er is halt neu auf dem Gebiet, und ich hab das auch gerade gesehen und korrigiert, aber wir reden hier von C.

Eine Idee warum es auf Visual Studio nicht klappt ?

Jahr Monat und Tag werden ja eingegeben und per mktime soll das ding alles automatisch berechnen dann ... aber es gibt halt nicht das richtige zurück ...
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

4

26.03.2014, 09:28

Was soll denn ts = &ts?

Ich versteh auch nicht so ganz was ihr da versucht. Guckt euch mal localtime_s und time an.

Zitat


localtime, _localtime32, _localtime64
[...]
Convert a time value and correct for the local time zone. More secure versions of these functions are available; see localtime_s, _localtime32_s, _localtime64_s.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

5

26.03.2014, 09:30

das ts=&ts ist schwachsinn, das ist mir klar das habe ich gerade rausgenommen.

Ich versteh es auch nicht, wie genau er das gemacht hat, weil so wie er es erklärt hat wars bisschen uneinsichtig.
Also zusammengefasst er erstellt die Struktor für time_t, berechnet die Sekunden die vergangen sind seit dem 1.1.1970 (per localtime) und gibt diese an den Zeiger ts.
dann füllt er ts mit seinen eigenen Angaben, also mit Monat, Jahr und Tag, und Zeit und lässt dann über mktime die restlichen Werte, wie den Wochentag berechnen.

Das ist halt seine Vorgehensweise, ich fands bisschen umständlich aber ist ja sein Teil des Beleges, nur kann ich diesen nicht implementieren da ich ein Speicherfehler bekomme ...

Bei Dev Cpp oder Netbeans klappt es überraschenderweise, das ist ja das komische !



Jetzt hab ich die Lösung, hab immer als Jahr einen falschen wert übergeben, und vergessen gehabt die -1900 mitzunehmen, uff ich vollidiot jetzt geht es ok trotzdem danke :).
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Daedra22« (26.03.2014, 09:41)


Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

6

26.03.2014, 09:41

Also wenn ihr eine Zeit haben wollt, dann habt ihr die falschen Schritte.

Struct anlegen (kein Pointer)
Aktuelle Zeit holen (time)
Zeit in lokale Zeit umrechnen (localtime_s)
Mit der Zeit tun, was zu tun ist
Zeit zur Ausgabe in Text umwandeln (asctime_s)

Wenn ihr die "Anzahl der Tage eines Monats" haben wollt, dann wäre es sinnvoller einfach ein Array oder ähnliche Struktur zu nutzen, da diese ja fest sind. Es muss lediglich geprüft werden, ob das aktuelle Jahr ein Schaltjahr ist, falls der aktuelle Monat Februar ist. Das ist aber auch kein Hexenwerk.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

7

26.03.2014, 09:49

Ja ich bin ja deiner Meinung, aber er will es unbedingt mit seiner Funktion machen, is beratungsresistent die hier würde ja reichen :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
short getAnzahlTageImMonat(const UINT uMonat, const UINT uJahr)
{
    //                     ungült,Jan,Feb,Mrz,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
    int arrTageImMonat[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    if (uMonat == 2)
    {
        // Februar: Schaltjahr unterscheiden
        if (istEinSchaltjahr(uJahr))
            return 29;
        else
            return 28;
    }

    if ((uMonat >= 1) && (uMonat <= 12))
        return arrTageImMonat[uMonat];
    else
    {
        //_ASSERT(0); // ungültiger Monat !
        return 0;
    }
}
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

8

26.03.2014, 10:08

Wenn er beratungsresistent ist, dann lass ihn den Fehler doch selbst ausbügeln.

Warum benutzt ihr eigentlich 3 IDEs, wovon eine seit 10 (oder 9) Jahren nicht mehr entwickelt wird?

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

9

26.03.2014, 10:11

Ja wir fangen halt bei den Basics an^^ und die 2 sind dann halt freeware.
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

10

26.03.2014, 10:15

Visual Studio (Express) ist auch Freeware. Aber Dev-Cpp würde ich direkt wegschmeißen oder mindestens gucken dass ein anderer Compiler genutzt wird als der mitgelieferte. Der dürfte halt 10 Jahre alt sein.

Werbeanzeige