Anzeige:
Ergebnis 1 bis 4 von 4

Thema: [C] globales struct: #include vs. extern, nichts funktioniert

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.09.2003
    Beiträge
    100

    [C] globales struct: #include vs. extern, nichts funktioniert

    Servus!

    Ich komm mal wieder nicht weiter. Bisher dachte ich, dass es sich mit globalen Variablen so verhält:

    globalcounter.h
    Code:
    struct globalcounter... (Definition des struct im header file)
    globalcounter.c
    Code:
    struct globalcounter *gc = malloc(size_of(struct gc));
    gc->blubb=1;
    printf("blubb=%d\n", gc->blubb);
    main.c
    Code:
    #include "globalcounter.h"
    printf("blubb=%d\n", gc->blubb);
    Hab' den Code gerade aus'm Kopf eingetippt, also Syntaxfehler könnt ihr ignorieren. Entscheidend ist, ob ich in main.c auf gc zugreifen kann. Ich kann's nämlich nicht. Ich hab' mir sogar die Speicheradresse von gc ausgeben lassen (in main.c und in globalcounter.c) und die ist in beiden gleich. Trotzdem gibt mir das printf in main.c "0" aus, das printf in globalcounter.c jedoch "1". Und es sollte natürlich in beiden Fällen "1" sein. Was mach ich falsch? Muss ich "extern" verwenden? Naja, ich hab's natürlich auch schon mit "extern" probiert(in main.c, anstatt des #include "globalcounter.h"), aber das hat nix geändert. Im konkreten Fall ist die Welt natürlich noch ein bisschen komplizierter (im struct gc sind weitere pointer), aber prinzipiell sollte das schon so passen.
    Vom timing her gibt's kein Problem - das printf in main.c wird erst nach dem printf in globalcounter.c aufgerufen. Es läuft auch alles im gleichen Thread (nämlich im Haupt-Thread; mein Programm startet zwar ein paar weitere Threads, aber davon ist weder main.c noch globalcounter.c betroffen).

  2. #2
    Registrierter Benutzer
    Registriert seit
    11.09.2003
    Beiträge
    100
    Okay, ich brauch kein "extern", hab' ich mitlerweile rausgefunden. Ich hab' auch schon ein paar andere globale structs, die alle funktionieren. Es liegt auch nicht am Typ von "blubb" - was ein Pointer auf eine GList ist - sondern daran, dass ich so langsam den Überblick verliere. Wenn ich eine neue GList in die struct aufnehme (blubb2), gibt's damit kein Problem.
    Anscheinend hab' ich irgendwo ein g_free() oder g_list_free() auf blubb in meinem Code, der zwischen dem printf() von globalcounter.c und main.c sein muss. Ich hab' ihn noch nicht gefunden...

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Vielleicht kannst du die echten Dateien oder zumindest echte Codeausschnitte zeigen.

    Der derzeitige Auszug von globalcounter.c sieht aus, als wäre da eine lokale Variable, die den selben Namen hat wie die globale, d.h. die globale Variable bleibt unangetastet.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.09.2003
    Beiträge
    100
    Oh je, hast recht, dann war das hier sogar noch falsch. Im richtigen Code hab' ich typedef im Header und kein struct beim malloc.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •