system ("cls") ändert Pointer-Wert ?



  • Hallo,

    ich hab ein seltsames Problem. Habe mir eine Struktur definiert aus der eine doppelt verkettete Liste aufgebaut wird. Weiterhin hab ich eine Ausgabefunktion geschrieben, welche die Liste einfach visualisiert.

    Zum besseren Verständnis hier kurz die verwendete Struktur:

    typedef struct cacheObject *pCacheObj;
    typedef struct cacheObject
    {
      unsigned int cksum;
      int id;
      int parentId;
    
      // Hierachy
      pCacheObj parent;
      pCacheObj child;
      pCacheObj hierarchyNext;
      pCacheObj hierarchyPrev;
      // Hash
      pCacheObj hashNext;
      // History
      pCacheObj historyNext;
      pCacheObj historyPrev;
    } firstCacheObjectType;
    

    Ich erstelle ein Objekt (es werden alle Werte mit NULL initialisiert) und füge es dann in die Liste ein.

    Die Ausgabefunktion sieht folgender Maßen aus:

    void hashOutput (dbCOHandle cache)
    {
      // vor dem Aufruf: Belegung 1
      system ("cls");
      // nach dem Aufruf: Belegung 2
      for (int i=0; i<HASHTABLE_SIZE; i++)
      {
        // hier die Ausgabe
      }
    } // hashOutput
    

    Nach dem Aufruf von system hat meine Struktur komischer Weise veränderte Werte, wobei NULL Werte (die das Ende der Liste markieren) einen Pointer bekommen. Das führt dazu, dass die Ausgabefunktion nicht mehr richtig funktioniert, da logischer Weise, beim letzten Element ein Fehler kommt (was ja eigentlich NULL sein sollte).

    Hier die Belegungen der Struktur vor und nach dem Aufruf von system.
    Der Fehler passiert bereits beim ersten Element.

    // Belegung 1
    cksum: 268
    id: 1
    parentId: 999
    parent: NULL
    child: NULL
    hierarchyNext: NULL
    hierarchyPrev: NULL
    hashNext: NULL
    historyNext: NULL
    historyPrev: NULL
    
    // Belegung 2
    cksum: 268
    id: 1
    parentId: 999
    parent: NULL
    child: NULL
    hierarchyNext: NULL
    hierarchyPrev: NULL
    hashNext: NULL
    historyNext: [b][u]0x52000200[/u][/b]
    historyPrev: NULL
    

    Wenn ich den system-Aufruf weg lasse, funktioniert es und die Werte bleiben unverändert.

    Also so richtig kann ich mir keinen Reim drauf machen, was dort passiert.
    Hat jemand eine Idee?

    Vielen Dank.



  • Ronny2 schrieb:

    Wenn ich den system-Aufruf weg lasse, funktioniert es und die Werte bleiben unverändert.

    Also so richtig kann ich mir keinen Reim drauf machen, was dort passiert.
    Hat jemand eine Idee?

    Du machst Dir irgendwo vor dem System-Aufruf (also in dem Code, der nicht gezeigt wurde) die Struktur der Liste kaputt.



  • Edit: Hab das Problem gefunden. Im malloc für die Struktur hatte ich einen falschen Typ angegeben.

    Danke für die Tipps.


Anmelden zum Antworten