您的位置:

c语言malloc二维,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的空间

    }

}