Am Don, 2002-10-10 um 14.38 schrieb Christian Weickhmann:
Hallo Michael!
Am Donnerstag, 10. Oktober 2002 14:08 schrieb Michael Matz:
Irgendwie bin ich nicht sicher, ob du weisst, was du willst. Willst du ne Typkonvertierung, z.B. um Funktion mit als 'char *' deklarierten Argumenten, mit 'unsigned char *' Parametern aufzurufen? Dann willst du einen Typecast:
Das ist vielleicht nicht so ganz rübergekommen (OK, ich habe es ja nicht richtig hingeschrieben...): Genau dieser Typecast führt zu Müll!
Wenn ich
unsigned char* irgendwas = "Blablabla"; strcpy(zielString, (const char*)irgendwas);
1. Siehe K'n'R Kapitel "Array vs. Pointer" (Auf Dtsch. Felder und Zeiger) Dann wahrscheinliche Lösung: unsigned char irgendwas[] = "blablabla", 2. Ist zielString alloziert? Wenn nein, suchst Du strdup() oder malloc.
Was ich eben gemerkt habe ist, dass das SIGSEGV nicht an der Typkonvertierung liegt. Der Debugger sagte mir, dass der Fehler in der Zeile liegt, wo strcpy() aufgerufen wird. Ich fürchte aber, dass das Problem in der Klasse liegt, die strcpy aufruft. Klasse? Reden wir hier von C++ oder von C? (C und C++ unterscheiden sich in Zeiger/Felderbehandlung nicht unerheblich im Detail)
Reden wir hier von (es war von xmlChar die Rede) libxml und C++ mit gcc-3.2? (In diesem Fall gäbe es noch ein weiteres Problem, das sich u.U. auswirken könnte)
Sieht folgendermaßen aus:
Klasse sm_schueler speichert die Daten einer Person (eines Schülers) und stellt Funktionen zu deren Manipulation bereit. Will ich jetzt ein Array von solchen Objekten erzeugen, kann es dann der Grund für dieses SIGSEGV sein, dass ich folgendes gemacht habe:
sm_schueler *s[100]; // um 100 Elemente von sm_schueler zu initialisieren... Falls C++, nimm vector<>, map<> oder ähnliches.
dann der Aufruf:
s[0]->setName("EinName");
Ist das so korrekt oder muss ich s[0] vorher noch initialisieren? Jein, Du musst es allozieren.
Dein obiges Array erzeugt lediglich 100 Zeiger auf sm_schueler, jeden einzelnen Schüler musst du noch allozieren und gegebenenfalls initialisieren.
Wenn ja, wie? In C++ mit new, in C mit malloc ;)
Ralf