problem mit char***
-
Hallo Leute,
Habe folgendes Problem:void fktName(char*** oValues) {
oValues = ....;
}Habe alles ausprobiert um oValues sinnvoll einen Wert zuzuweisen.
Bin aber mit meinem Latein am Ende.
Ich habe nicht die Möglichkeit die Funktion zu aendern, also einen anderen Parameter zu benutzen.Vielen Dank
-
Was soll die Funktion machen?
-
sie er es meint glaub sowas
char huhu[] = "h"; char *mattliebtjunix = huhu; char **holahitidiewaldfee = &mattliebtjunix; char ***derboesewolf = &holahitidiewaldfee;
-
Diese Funktion kommt aus einer API. Nur der Funktionsrumpf ist
fest vorgegeben und das Programm setzt diesen Wert den man dort
setzt, als default Wert im Fenster.Habe alles schon probiert, erzeuge immer einen Core Dump .
(Ich entwickle auf AIX). wahrscheinlich muss man sich den Speicher
erst hohlen. Der Aufrufer der Funktion macht dann das free.Ich verstehe auch nicht was char*** ist. ein p auf p auf p ???
-
siehst du doch an meinem qualitativ hochwertigen sourcecode
-
Hi 1ntrud0r
vielen dank für deine Hilfe, aber ...Core dump wird immer noch erzeugt: hier mal die orginalfunktion.
Das Programm (in dem Falle VPM) ruft die Funktion bei bestimmten
user actions auf.void CATDMUsrMethod::GetInputListOfValues(const char* iCatab, const char* iAttribute, int* oAuthorized, int* oNbValues, char*** oValues) // *oAuthorized=-1; //Help values without default value // *oAuthorized=1; //Authorized values without default value // *oAuthorized=-2; //Help values with first value as default value // *oAuthorized=2; //Authorized values with first value as default value { static char *partNumber = "EMIL"; static char **partNumbers; //-------------------------- //Your code !! if(getenv("TRACEUSRMETHOD")) { if ( strcmp(iAttribute, "S_PART_NUMBER") == 0 ) { // set oValues // *oAuthorized=2; *oNbValues = 1; char var1[] = "EMIL"; char *p1 = var1; char **p2 = &p1; char ***p3 = &p2; oValues = p3; } } }
irgentwie versucht der Aufrufer da ein free auf oValues zu machen. Wie du siehst hab ich mich an deinen Code orientiert.
-
Dein Fehler is das du in der Funktion GetInputListOfValues die Variable
char var1[] = "EMIL";
anlegst. Diese Variable wird auf dem Stack angelegt und ist mit dem Ende der Funktion GetInputListOfValues
wieder weg. Damit referenuzierst du als Aufruferer irgendwo wild in irgeneinen Speicher und somit ist der
CoreDump da und berechtigt.Folgende Frage. An der Stelle an der die Funkton GetInputListOfValues aufgerufen wird ist da schon Speicher
für char*** oValues allociert? Falls ja musst du nur den Wert mit strcpy zuweisenFalls nein must du mit malloc in C oder new in C++ entsprechend Speicher allokieren und danach den Wert mit strcpy zuweisen.
Viel Spaß