Zeigervektoren werden nicht mit Inhalt gefüllt
-
Hallo allerseits,
ich hoffe ihr könnt mir hier etwas auf die Sprünge helfen. Meine C-Kenntnisse sind noch nicht alzuweit vorangeschritten, deshalb find ich wohl meinen Fehler nicht.Das Programm soll ein Dreieck in folgender Form darstellen:
1
11
121
1221
12221
122221
1222221
...Also außen 1en, in der Mitte 2en (fragt bitte nicht nach dem Sinn, das wird hinterher pascalsches Dreieck hinauslaufen).
Soweit so gut, diese Form bekomme ich auch ausgegeben, allerdings mit anderen Zahlen:
0
0 -1610612736
0 0 -1610612736
0 0 0 -1610612736
...Mittels Debugging hab ich schon überprüft, dass die Variablen n,i,j korrekt gezählt und die Schleifen richtig durchlaufen werden. Somit liegt das Problem bei meinen Zeigern/Vektoren. Ich versteh nur nicht, warum die nicht mit dem richtigen Inhalt gefüllt werden, sieht das jemand?
Vielen Dank.
/* Dreieck.c */ #include<stdio.h> #include<stdlib.h> int main() { int i,j; int n = 0; /* Definition: Zeigervektor mit 10 Elementen */ float **vektor; vektor = (float**)malloc(10*sizeof(float*)); for(i=0; i<10; i++) { n++; /* Speicherplatz-Reservierung einer Zeile */ vektor[i]=(float*)malloc(10*sizeof(float)); /* Überprüfung, ob Speicher reserviert wurde */ if(vektor == NULL) { printf("Speicher-Reservierung fehlgeschlagen!"); return -1; } /* Setzen des 1. und n. Elements der Zeile auf 1*/ vektor[i][0]=1; vektor[i][n]=1; for(j=1; j<n-1; j++) { /* Berechnung der restlichen Zeilen-Elemente */ vektor[i][j] = 2; } } printf("Pascalsches Dreieck:\n"); for(i=0; i<10; i++) { for(j=0; j<=i; j++) { /* Ausgabe des Elements */ printf("%i\t", vektor[i][j]); } printf("\n"); } /* Freigabe des gesamten reservierten Speichers */ for(j=0; j<i; j++) { free(vektor[j]); } return 0; }
-
Das Hauptproblem ist, dass du floats mit %i ausgibst.
Außerdem schreibst du nichts in die Spalte n-1, deine Schleife bricht vorher ab. Dafür schreibst du in Spalte n, was du zumindest beim letzten Durchlauf der äußeren Schleife nicht darfst, da n dort 10 ist.
-
Juhu dankeschön! Klar mit %f geht das ganze besser