本文目录一览:
- 1、如何在c语言中malloc一个二维数组a[m][n]
- 2、如何用C语言malloc声明一个二维数组,比如我想声明一个 int a(5)(8)
- 3、C语言用malloc定义二维数组问题
- 4、C语言 用malloc分配2维数组后初始化出错,谁帮我看看错在哪里
- 5、C语言使用malloc的二维数组报错如何解决?
- 6、c语言 malloc二维数组
如何在c语言中malloc一个二维数组a[m][n]
for(inti=0;irow;i++){free(array);}free(array);}如果上面需要许多行的矩阵,可以直接用一个巨大的一维数组比如:int*array=(int*)malloc(sizeof(int)*col*row); 访问的时候就这样:可以节约一些内存的分配
如何用C语言malloc声明一个二维数组,比如我想声明一个 int a(5)(8)
malloc声明一个二维数组, 假定行数 NR=5, 列数NC=8:
int NR=5,NC=8;
int i,j;
int **a;
// scanf("%d %d", NR, NC); 你也可以在这里输入行数,列数,然后
// 动态分配:
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;jNR;j++){
a[j] = (int *) malloc(sizeof(int) * NC);
}
// 假定这里赋初值:
for (j=0;jNR;j++) for (i=0;iNC;i++) {
a[j][i] = (j+1)*100 + i;
}
//输出数组元素值:
for (j=0;jNR;j++){
for (i=0;iNC;i++) printf("%3d ",a[j][i]);
printf("\n");
}
//释放内存的方法:
for (j=0;jNR;j++) free(a[j]);
free(a);
C语言用malloc定义二维数组问题
首先,p的类型为 int **
那么p和p+1,相差一个int类型嘛
p先申请了 5个数组长度
后来p[i]又申请了5个数组长度,分别保存在刚才申请的5个元素里
所以,这就相当于定义了P[5][5]咯。。这个大概就是这个意思啦,要画图的话,才好讲。。
至于第二个问题。。。听不懂,哈哈。。**p就是指向指针的指针嘛(不要骂人哈,本来就是嘛)
返回值只有相对于函数,才有返回值之说。。
通俗的讲,**p 是指针的指针, p[i]是指针
如果p定义为p[][],那么,p就是指针的指针, p[i]就是指针 和上面定义是一样的
PS:网上讲解指针的指针的文章多了去了,我在这里也讲不明白,那些文章都条例清晰,内容深入。。回答完毕,给点分下载文库吧
C语言 用malloc分配2维数组后初始化出错,谁帮我看看错在哪里
首先是,malloc语句计算字节长度错误,
第一个应改为malloc(4*sizeof(int*))
第二个应改为malloc(4*sizeof(int))
还有,a[4][4]={...}这样的语句只能在定义变量时初始化用,以上赋值需要逐个元素进行。
C语言使用malloc的二维数组报错如何解决?
把double **u = (double **)malloc(sizeof(sizeof(double*)*ROW));改为double **u = (double **)malloc(sizeof(double*)*ROW);——前者只申请了4个字节,后者才是申请12个字节(3个double *所占空间)。
(这里有点复杂了)u[x][y]中x只能取0、1、2,因为只申请了3个指针;y可能取0、1、2、3、4。但后面有u[4][0]、u[4][1],甚至有u[i+1][0]之类,显然一维下标超出2了,造成了越界错误。似乎后面你把ROW和COL弄反了……
代码没有释放所申请的内存也是一错。
c语言 malloc二维数组
楼主对指针和数组、以及动态内存分配的概念不是很清晰。
struct GraphMatrix{ VexType *vexs;/* 顶点信息*/
AdjType arcs[VN][VN];/*关系矩阵*/
};/* VN为图中顶点个数,具体算法中替换为具体常数*/
在这个结构定义中,arcs是一个数组,在生成GraphMatrix对象是,会为arcs分配VN*VN个AdjType的数据空间,所以可以对arcs[i][j]=xxx;对数组元素进行赋值,但不能对arcs=p;这样的方式进行赋值。
而在main函数中,malloc()返回的是一个void*类型,在把它赋给p之前,需要强制转换为p的类型(也即是int**)才能赋给p。
注意:int** p; p的类型是指针而非数组!
但这里需要指出的是,main函数中,虽然语法没有报错,但实际类型是不匹配的。
首先,int**p表示,p是指向int*的指针,也即是说,*p应该是一个int*类型(指针类型)。
但是在p = (int**)malloc(sizeof(int)*5); 这一个语句中,却是申请了5个int来作为保存int*的空间。刚在下面的循环申请空间中,可能会出问题:
p[i] = (int*)malloc(sizeof(int)*5);
p[i]的实际malloc出来的类型是int,而不是int*,所以是会悲剧的(如在一个int只有两字节,而指针占4字节的系统上,空间是不够的。)
所以这段代码应该是:
main()
{
int **p,i;
p = (int **)malloc(sizeof(int*)*5); // 5个int*的空间
for(i=0;i5;i++)
{
p[i]=(int *)malloc(sizeof(int)*5); // 5个int的空间
}
}