1樓:
看來你一定是個初學者。當你需要成千上萬的資料時你能像int a=5;int *p; p=&a;一樣定義那麼多數嗎?int *p; p=(int *)malloc(100*sizeof(int));實際上可以理解為宣告瞭一個p[100]的int型陣列,你怎麼用陣列就怎麼用p的個指標。
那麼為什麼不直接int a[100]這樣宣告呢?當然可以,這得從兩方面說明:1.
當你知道用多少個資料時,用int a[100]要比用malloc那樣方便得多,但很多時候是不知道需要多少資料,要根據需要臨時輸入資料個數再宣告陣列——這就有問題了:c是不允許用變數做陣列的宣告大小的;若儘量往大里安排,那麼你事先安排了2000個資料空間,而大部分時候卻只使用10個,那不是對很有限的存存空間的無謂浪費嗎?2.
int a[100]這樣宣告的空間在棧上;棧相對較小,宣告太大的陣列是放不下的,比如sz[2000][2000]在很多編譯器下是不成功的。而用malloc宣告的空間在堆上,那裡很大很大,可以安排很大的資料量。使用malloc建立的指標p是可以指向別處的,不像你說的不能再p="123"了。
但你不能這樣做,因為在堆上分配空間是永久性的,必須人工釋放,你讓它的指標指向別處了,那分配的空間就找不到了(因為空間頭指標是唯一記號),可是它還在那裡放著釋放不了;累積多了就把內在消耗光了——這叫內在洩漏!所以,用了p=(int *)malloc(100*sizeof(int));,完了必須得用free(p);來釋放分配的記憶體空間。
2樓:追悔七年
最主要有三點:
第一,用malloc可以宣告很大的記憶體空間,當你要處理大資料的時候可能就會用到。因為你在函式中申請記憶體,會受到棧大小的限制,vc程式的棧預設是1m,如果你在函式中申請的記憶體大於1m,那就會引起棧溢位,導致你的程式死掉。
第二,malloc宣告的記憶體空間,生命期直到你呼叫free釋放或程式退出,而函式中的變數,在函式返回時就被釋放了。
第三,malloc返回的指標,是指向你申請的記憶體空間地址的,你在函式中定義一個指標p,是用來臨時儲存這個記憶體空間地址的,以便你的函式中後序**使用你用malloc申請的空間。
舉個簡單的例子,你電腦上有一張高清**,假如有3m,那麼你的程式中要修改這張**,你可能需要把**完全載入記憶體,然後再進行操作,這個時候你就可以用malloc申請一個3m的空間,然後再把你的**讀出來存到這片記憶體中,然後你再寫其他**來修改**,就是這樣。
按你說的,直接int a=5;int *p; p=&a;這樣確實是把a的指標賦給了p,但是看你怎麼用。因為a是int型,有4個位元組,如果你只要修改a的第1個位元組,你就可以這樣用p:
int a = 285;
uchar *p = (uchar*)&a;
*p = 3;
這樣的話a就等於259了。
3樓:匿名使用者
函式分配的記憶體如何使用與函式用途
1 分鐘前 提問者懸賞:30分 | 吳涵宇_ | 分類:c/c++ | 瀏覽4次
在網上看到的都是malloc函式的使用方法,但是卻不知道malloc函式的用途,int *p; p=(int *)malloc(100*sizeof(int));那麼只要p不是null就代表記憶體分配成功了,既然p已經指向了系統分配給我的一塊記憶體地址,那就不能再 p="123";這樣了,那麼之後呢 我拿著這指標p能幹什麼呢?這是很讓我困擾的問題,難道有什麼辦法能去給p所
4樓:
可以用for(i=0;i<=n;i++)p+i=and......
虛擬機器如何分配記憶體和,虛擬機器如何分配記憶體和CPU
根據主機配置來分配cpu和記憶體,所分配的cpu和記憶體數目不要超過物理機cpu和記憶體數目,而且還要預留一部分資源給物理機,分配的資源超過物理機所能承受的數量的話會好卡 不可以4核分配不了8個核 記憶體可以適當大一些,16g你分個2g出來,不小氣麼? 瀟瀟雨歇 也許是你所分配的就是他能使用的極限,...
ogre中記憶體分配函式原始碼中的幾個疑問,請求各路高手解答。感激不盡
該函式是這樣的,因為要對記憶體按2的n次方對齊,在unsigned char p new unsigned char size alignment 這一句先申請了記憶體,但所得到的指標p可能不是記憶體對齊的,如按4位元組對齊的話,記憶體地址只能是0x00000000,0x00000004,0x000...
專四分數分配,英語專業四級分數如何分配
柳下聞鶯 聽寫15分 聽力15分 完形填空10分 語法與詞彙15分 閱讀理解20分 作文15分 便條10分 專四考試各個專案分數 1.聽寫15分 2.聽力15分 3.完形填空10分 4.語法與詞彙15分 5.閱讀理解20分 6.作文15分 7.便條10分 英語專四考試滿分100分,60分及格,考試及...