Pointer-Problem...
-
Hallo,
ich habe da ein Problem: Eine Variable (vom Typ einer Pointer-auf-struct) wird mit NULL initialisiert und soll nun von einer anderen Funktion einen Wert zugewiesen kriegen. Als Beispiel zur Illustration des Problems:
#include <stdlib.h> #include <stdio.h> typedef struct test_ test; void methode(test *versuch); struct test_ { int blah1; }; int main() { test *test_1 = malloc(sizeof(test)); test *test_2 = NULL; methode(test_1); methode(test_2); printf("%d \n", test_1->blah1); printf("%d \n", test_2->blah1); return 0; } void methode(test *versuch) { if (!versuch) { test *versuch_neu = malloc(sizeof(test)); versuch_neu->blah1 = 2; *versuch = versuch_neu; return; } else { versuch->blah1=4; } }
Beschweren tut sich der gcc bei "*versuch = versuch_neu;" mit " error: incompatible types in assignment". Wie macht man eine solche Zuweisung korrekt?
Wäre über eine kleine C-Nachhilfe sehr dankbar
Grüße,
Michael
-
#include <stdlib.h> #include <stdio.h> typedef struct test_ test; /* void methode(test **versuch); struct test_ { int blah1; }; int main() { test *test_1 = malloc(sizeof(test)); test *test_2 = NULL; methode(&test_1); methode(&test_2); printf("%d \n", test_1->blah1); printf("%d \n", test_2->blah1); return 0; } void methode(test **versuch) { if (!*versuch) { test *versuch_neu = malloc(sizeof(test)); versuch_neu->blah1 = 2; *versuch = versuch_neu; return; } else { (*versuch)->blah1=4; } } */ test methode(int versuch); struct test_ { int blah1; }; int main() { test test_1; test test_2; test_1 = methode(1); test_2 = methode(0); printf("%d \n", test_1.blah1); printf("%d \n", test_2.blah1); return 0; } test methode(int versuch) { test ret; if (!versuch) { ret.blah1 = 2; } else { ret.blah1 = 4; } return ret; }
lg lolo
-
XDVD schrieb:
void methode(test *versuch) { if (!versuch) { test *versuch_neu = malloc(sizeof(test)); versuch_neu->blah1 = 2; *versuch = versuch_neu; return; } else { versuch->blah1=4; } }
versuch ist vom Typ test*, versuch_neu ist vom Typ test*.
Du dereferenzierst versuch, also ist "versuch" vom Typ test.
Also weißt du den Typ test zu einer Variable vom Typ test zu, was nicht geht.
Lösung: Einfach nicht dereferenzieren.Weiteres Problem: Der neue Zeiger wird außerhalb der Funktion nicht bekannt sein. Du übergibst schließlich eine Kopie der Variable test_2 in Zeile 17. Diese Kopier wird in deiner Funktion überschrieben, nicht die ursprüngliche Variable.
Lösung: Übergib die Adresse deiner Variable. Dies resultiert in Doppelzeiger, welchen du natürlich dereferenzieren musst.
-
Klasse, vielen Dank! noobLolos Antwort ging zwar ein bisschen an meinem Problem vorbei (danke für die Mühe trotzdem), aber Janjans Erklärung war perfekt! Gerettet!
-
XDVD schrieb:
noobLolos Antwort ging zwar ein bisschen an meinem Problem vorbei
das ich das anders sehe sollte klar sein oder
lg lolo