ich Zeiger zu verstehen, ich versuche, und ich habe dieses einfache Beispiel bekamC char-Array, Zeiger, malloc, frei
void third(char ****msg) {
***msg = malloc(5 * sizeof (char));
printf("\nthe msg in third is :%s ", ***msg);
strcpy(***msg, "third");
printf("\nthe msg in third after is: %s", ***msg);
// free(***msg);
}
void change(char***msg) {
**msg = malloc(5 * sizeof (char));
printf("\nthe msg in change is :%s ", **msg);
strcpy(**msg, "change");
printf("\nthe msg in change after is: %s", **msg);
third(&msg);
// free(**msg);
}
void test(char ** msg) {
*msg = malloc(5 * sizeof (char));
printf("\n the msg in test is: %s", *msg);
strcpy(*msg, "test");
printf("\nthe msg in test after is: %s\n", *msg);
change(&msg);
free(*msg);
}
int main(int argc, char** argv) {
char * msg;
test(&msg);
printf("\nthe msg back in main is: %s", msg);
}
Ich könnte sagen, es funktioniert gut, aber könnten Sie mir sagen, wann und wie ich muss den zugewiesenen Speicher freimachen, denn wenn ich die // aus Funktionen entferne und drittens laufe und es mache habe ich Fehler. Und es gibt einen Weg, um den Inhalt der Nachricht in der ersten print-Anweisung jeder Funktion zu erhalten - siehe otuput:
the msg in test is:
the msg in test after is: test
the msg in change is :0��
the msg in change after is: change
the msg in third is :P��
the msg in third after is: third
the msg back in main is:
Gibt es eine Möglichkeit, die msg in Veränderung zu bekommen ist: Test und dann die msg in der dritten ist: Änderung
Was "Fehler" sind Sie "Haben"? –
einfaches Beispiel? mit vier Starts? Du bist weit mehr als ein t (h) ree-star Programmierer zu werden. –
WOW! Du bist der erste 4-Sterne-C-Programmierer, den ich sehe! Sie sind sich bewusst, ein 3-Sterne-C-Programmierer ist schon kein Kompliment, oder? – Olaf