Inhalt eines Char-Zeigers einem String zuweisen
-
Gebe ich als Watchpoint innerClass an, dann unterbricht mir der Debugger nur an der Stelle der Deklaration:
/*char *innerClass = new char [FC6_MAX_NAME_LEN +1];*/
Old value = 0xb031e654 "\215eè[^_ÉAU\211å\213E\bÉAU\211å\203ì\fWVSè"
New value = 0x81c5c90 ""Gebe ich noch target als watchpoint an und gehe in die Funktion fcInnerClassRef(), dann stoppt der Debugger beim return mit der Meldung:
Watchpoint 16 deleted because the program has left the block in
which its expression is valid.Watchpoint 18 deleted because the program has left the block in
which its expression is valid., wobei Watchpoint 16 auf innerClass und Watchpoint18 auf target liegt.
Habe gerade noch festgestellt, dass noch mehr Variablen ihren Speicherbereich verlieren. Habe testhalber einmal watchpoints auf die Parameter der Funktion installIface() gesetzt, aber auch die verlieren ihre Gültigkeit. Wie ist das möglich?
-
Hm, das macht mein gdb auch ganz gerne (obwohl innerClass ja nichts mit dem Stack Context von fcInnerClassRef zu tun hat)... ich helfe mir dann immer mit:
(gdb) p &innerClass $1 = (char **) 0xbffff3d4 (gdb) watch *((char**)0xbffff3d4) Hardware watchpoint 2: *(char **) 3221222356Klar, dass es einen Break bei der Zuweisung des Speicherbereichs gibt. Wenn er jetzt immernoch nicht die Stelle findet, fange ich an an Voodoo zu glauben.
-
hmm ich denke deine Voodoo-Glaube nimmt langsam Gestalt an, habe es so gemacht, wie du es beschrieben hattest, aber das gleiche Ergebnis: break bei Deklaration, erneutes continue, Meldung dass das Programm abgestürzt ist (Program received signal SIGSERV), es ist nur sehr sonderbar, dass auch bei die Parameter keine Speicheradresse mehr haben, nachdem das Programm aus fcInnerClassRef() zurückkehrt.
-
Also Jungs, der Fehler ist gefunden!

Er war alelrdings an einer ganz anderen Stelle, und zwar wurde in der Funktion fcInnerClassRef eine weitere Funktion aufgerufen, die wiederum die Funktion itoa() enthält. Mein Fehler war, dass ich versucht habe, einer Stelle in einem Array aus Char-Zeigern mithilfe dieser Funktion einen nummerischen Wert als char schreibe. Das Problem ist nur, dass ich diese Stelle bereits vorher einen const char-Wert zugewiesen habe:char *argv[5]; argv[0] = ""; argv[1] = path; argv[2] = target_rootCmd; argv[3] = "-classtype"; argv[4] = "deviceobject"; ... argv[0] = ""; argv[1] = path; argv[2] = "configure"; argv[3] = "-value"; itoa(tmpval, argv[4], 10); ...Damit ging es natürlich nicht. Die Verbesserung lautet:
char buffer[10]; itoa(tmpval, buffer, 10); argv[4] = buffer;Nach viel Nerven, der halben Firma, die sich den Kopf zerbrochen hat, zeilenweises auskommentieren bzw. include von Code und natürlich euerer Hilfe wurde diese Stelle nun gefunden. Ich danke euch alle ganz herzlich für die aufopfernde Hilfe

mfg chuqa