2016-03-23 5 views
0

Ich habe eine Matrix dynamisch wie folgt deklariertGröße einer Matrix dynamisch auf C erklärt

double **y; 
y = (double **)malloc(n*sizeof(double *)); 
for(i=0;i<n;i++) 
    y[i]=(double*)malloc(m*sizeof(double)); 

Wo m und n ganze Zahlen sind, bevor erklärt. Dann muss ich eine Funktion berechnen, die zwei verschiedene Matrix multipliziert, und ich muss überprüfen, ob die Anzahl der Zeilen in der ersten Matrix mit der Anzahl der Spalten in der zweiten Matrix übereinstimmt. Also muss ich die Anzahl der Spalten und Zeilen wissen. So berechnet ich, was folgt:

int k=sizeof(M[0])/sizeof(double); 

Aber diese ganze Zahl k gibt mir 1. Und kein matther wie lange n und m ...

Was mache ich falsch?

Danke und Entschuldigung für mein Englisch.

+0

bekommen 'n * m' ist Ihre Größe. –

+0

Wirf auch nicht den von 'malloc()' zurückgegebenen Wert. Siehe: http://Stackoverflow.com/q/605845/5399734 –

+0

Verwenden Sie int nicht für eine Größe, verwenden Sie immer size_t oder ptrdiff_t – 12431234123412341234123

Antwort

4

Sie können den sizeof-Operator nicht für dynamisch erstellte Arrays verwenden, um die Array-Größe zu ermitteln. Wenn das Array dynamisch erstellt wird, ist es die einzige Möglichkeit, die Größe zu kennen, um es irgendwo zu speichern.

+0

Ok, das macht Sinn, also welche Funktion muss ich verwenden? –

+0

@XavierTapiaGonzalez Welche Funktion verwenden, um was genau zu tun? Wenn Sie Speicher dynamisch zuweisen müssen und später seine Größe benötigen, müssen Sie die Größe des Arrays irgendwo speichern. Später müssen Sie diese gespeicherten Werte verwenden, hier m und n. – 4pie0

+0

Ok, so ist es unmöglich, die Informationen über die Größe einer Matrix nur aus der Matrix zu bekommen? –

3

Mit sizeof(M[0]) nur bekommt man die Typen Größe M[0] die double * ist, die in Ihrem Fall identisch mit Größe von double

Also in Ihrem Fall müssen Sie die Größe des zugewiesenen Array speichern (n, m).

Eine andere Lösung wäre Stapel Zuordnung zu verwenden, wo sizeof tatsächlich die Größe der Typen wie double[]