Probleme mit Call-by-Reference
-
Evtl. ist dein Aufruf falsch? Sicher falsch ist die Zeile
*value++;
Google mal nach "c operator precedence".
-
wah, mehr klammern, weniger regeln!
-
Ich bezweifle aber, dass das den Crash verursacht. Wäre ja fast schon pingelig, nur weil der Pointer 1 weiter zeigt. Will ich echt nicht glauben.
-
wenn alles falsch ist wie sieht es dann richtig aus?
-
problem gelöst;) aber wie gebe ich den speicher wieder frei? das delete in der main geht nicht;/ -> runtime error
void foo(int **value) { *value = new int[3]; **value = 1; ++(*value); **value = 2; } int main() { int *a = 0; foo(&a); --(*a); cout << *a << endl; delete[] a; return 0; }
-
++(*value);
**value = 2;ersetze das durch
*(value[1])=2;oder
*(*value+1)=2;denn durch das ++ zeigt der zeiger nachher ja nicht mehr auf den speicher der von new geholt wurde, sondern sizeof(int) bytes weiter.
-
so:
void foo(int **value) { *value = new int[3]; **value = 1; *(value[1]) = 2; <-- runtime error;/ }
-
void foo(int **value) { *value = new int[3]; **value = 1; *(*value+1) = 2; } int main() { int *a = 0; foo(&a); ++a; cout << *a << endl; delete[] a; cin.get(); return 0; }
warum geht hier das delete nicht? ;/
-
s geht nicht, weil ich dumm bin
*(value[1]) = 2;
muss
(*value)[1] = 2;sein
-
warum geht das delete[] a; im oberen codesnipsel nicht?
-
weil a nicht an den anfang eines speicherstuecks zeigt, sondern wo anders hin.
-
ach so;)
wie funktioniert das hier? (*value)[1] = 2; dann müsste doch auch folgendes gehen?value[0][0] = 2;
-
das geht auch, aber vergleichbar waere eher:
value[0][1] = 2;