在C上动态声明的矩阵的大小

在C上动态声明的矩阵的大小,c,matrix,sizeof,C,Matrix,Sizeof,我动态地声明了一个矩阵,如下所示 double **y; y = (double **)malloc(n*sizeof(double *)); for(i=0;i<n;i++) y[i]=(double*)malloc(m*sizeof(double)); 但是这个整数k返回我1。没有matther n和m有多长 我做错了什么 感谢并为我的英语感到抱歉。您不能在动态创建的数组上使用sizeof运算符来获取数组大小。如果数组是动态创建的,那么知道它大小的唯一选项就是将它存储在某个地方。

我动态地声明了一个矩阵,如下所示

double **y;
y = (double **)malloc(n*sizeof(double *));
for(i=0;i<n;i++)
  y[i]=(double*)malloc(m*sizeof(double));
但是这个整数k返回我1。没有matther n和m有多长

我做错了什么


感谢并为我的英语感到抱歉。

您不能在动态创建的数组上使用sizeof运算符来获取数组大小。如果数组是动态创建的,那么知道它大小的唯一选项就是将它存储在某个地方。

使用sizeofM[0]只会得到类型大小为M[0]的double*在您的情况下与大小为double相同

因此,在您的情况下,您必须保存分配的数组n,m的大小


另一种解决方案是使用堆栈分配,其中sizeof实际上可以获得类型的大小,如double[]

n*m是您的大小。另外,不要强制转换malloc返回的值。请看:不要使用int表示大小,使用allways size_t或ptrdiff_tOk,这很有意义,那么我必须使用哪个函数?@XavierTapiaGonzalez使用哪个函数来做什么?若您需要动态分配内存,并且以后需要它的大小,那个么您必须将数组的大小存储在某个地方。稍后您必须使用这些存储的值,这里是m和n。好的,那么仅仅从矩阵中获取矩阵大小的信息是不可能的吗?不客气。数组包装器struct M{double**data;size_t M,n;}是存储数组维度的好地方,您还可以将结构作为函数的变量发送?在我的例子中,对于乘法矩阵,double**matrix\u multstruct M,struct N?
int k=sizeof(M[0])/sizeof(double);