Pointer auf Matrix; Pointer hochzählen geht schief
-
Hallo Leute,
ich habe 2 Funktionen, die eine erzeugt eine Matrix und die andere soll eine Matrix anzeigen.
void createMatrix(int m, int n, int **mat){ char c; int matrix[m][n]; *mat = &matrix[0][0]; fl(); printf("Matrix automatisch fuellen? (j/n):\n"); scanf("%c", &c); if(c == 'j'){ srand(time(NULL)); //automatische mit zufallszahlen füllen n = n * m; while(n-- > 0){ **mat = rand() % 10; printf(" %d ", **mat); (*mat)++; } *mat = &matrix[0][0]; } else { ... ... } }
Global gibt es einen pointer int *pMatrix_A, dessen adresse hier übergeben wird.
createMatrix(m1, n1, &pMatrix_A);
Wenn ich nun Testweise in meiner Main, aufrufe:
printf("\nTest1: %d\n", *pMatrix_A); pMatrix_A++; printf("Test2: %d\n", *pMatrix_A);
das wird das erste Element richtig ausgegeben, aber das zweite ist irgend ein mist, daher die vermutung, dass das hochzählen in de Wald zeigt, die Frage ist nur 'warum!'?
Blitzgedanke:
Oder kann es sein, dass der adressierte Speicher für die Matrix aus createMatrix, nach dem die Funktion fertig ist, wieder freigegeben wird???mfg
ani
-
Animal21 schrieb:
Blitzgedanke:
Oder kann es sein, dass der adressierte Speicher für die Matrix aus createMatrix, nach dem die Funktion fertig ist, wieder freigegeben wird???So ist es.
-
verdammt!
hmm und wie könnt ich das sonst dynamisch machen, also die größe der matrix soll nicht schon feststehen und ich will auch pauschal nicht einfach was reservieren...
(möglichst ohne malloc)
mfg
ani
-
Animal21 schrieb:
hmm und wie könnt ich das sonst dynamisch machen,...
(möglichst ohne malloc)Das widerspricht sich. Deine oberhässlichen VLA erkläre ich dir jetzt nicht.
-
das kann man auch netter sagen... gibts nur noch i.io.en!?
egal, dann eben mit malloc
over and out!
- close -
-
Animal21 schrieb:
das kann man auch netter sagen... gibts nur noch i.io.en!?
egal, dann eben mit malloc
Da du es jetzt mit malloc machst, gibt es schon eine weniger.