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的空間

    }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/286999.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 13:07
下一篇 2024-12-23 13:07

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論