2016-03-23 4 views
0

Я объявил матрицу динамически следующийразмера матрицы объявлено динамически на C

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

Где т и п целые числа объявлены ранее. Затем мне нужно вычислить функцию, которая умножает две разные матрицы, и мне нужно проверить, совпадает ли число строк в первой матрице с числом столбцов на второй матрице. Поэтому мне нужно знать количество столбцов и строк. Поэтому я вычислен, что следующим образом:

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

Но это число к возвращает мне 1. И не matther как долго п и т являются ...

Что я делаю неправильно?

Спасибо и извините за мой английский.

+0

'п * M' ваш размер. –

+0

Также не указывайте значение, возвращаемое 'malloc()'. См .: http://stackoverflow.com/q/605845/5399734 –

+0

dont использовать int для размера, использовать allways size_t или ptrdiff_t – 12431234123412341234123

ответ

4

Вы не можете использовать оператор sizeof для динамически созданного массива для получения размера массива. Если массив создается динамически, единственным вариантом знать его размер является его хранение где-то.

+0

Хорошо, это имеет смысл, и какую функцию мне нужно использовать? –

+0

@ XavierTapiaGonzalez Какую функцию использовать, чтобы точно? Если вам необходимо распределить память динамически, и вам понадобится ее размер, вы должны где-то сохранить размер массива. Позже вы должны использовать эти сохраненные значения, здесь m и n. – 4pie0

+0

Итак, невозможно получить информацию о размере матрицы только из матрицы? –

3

Использование sizeof(M[0]) только получает вас типа размер M[0], который double * в вашем случае совпадает с размером double

Так что в вашем случае вы должны сохранить размер выделенного массива (п, т).

Другим решением было бы использовать выделение стека, где sizeof может реально получить размер типов как double[]

Смежные вопросы