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.