本文目錄一覽:
- 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的空間
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/286999.html