C語言中如何動態增加記憶體空間,C語言中,如何清空記憶體動態分配的堆空間?

時間 2022-02-07 11:35:14

1樓:匿名使用者

有一個malloc函式,專門用來進行動態記憶體管理的

c語言中,如何清空記憶體動態分配的堆空間?

c語言動態陣列如何擴充空間

2樓:四舍**入

c語言動態陣列擴充空間,主要是利用動態儲存分配庫函式來實現的,常用的有malloc函式和calloc函式。

malloc()是c語言中動態儲存管理的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配一個長度為size的連續空間。其引數是一個無符號整形數,返回值是一個指向所分配的連續儲存域的起始地址的指標。

例如:char *x;

x = (char *)malloc(10); //x就指向了包含10個字元單元的儲存空間。

3樓:匿名使用者

什麼叫動態陣列,c的都是指定好下標的陣列

4樓:匿名使用者

???倒底什麼意思,如果能有更直觀點的方式就好。

5樓:群詩星

非連續分配記憶體:

#include

#include

using namespace std;

int main (void)

}for(int i = 0; i < m; i++)for(int i = 0; i < m; i++)}

for(int i = 0; i < m; i++)cout<

}system("pause");

return 0;}

c語言中的動態記憶體分配的用法舉例

6樓:匿名使用者

1、malloc函式:其作用是在記憶體的動態儲存區中分配一個長度為size的連續空間。其引數是一個無符號整形數,返回值是一個指向所分配的連續儲存域的起始地址的指標。

2、free函式:由於記憶體區域總是有限的,不能不限制地分配下去,而且一個程式要儘量節省資源,所以當所分配的記憶體區域不用時,就要釋放它,以便其它的變數或者程式使用。這時我們就要用到free函式。

3、calloc函式:其作用是在記憶體的動態儲存區中分配n個長度為 size 的連續空間。函式返回一個指向分配區域的起始位置的指標;如果分配不成功,則返回null。

擴充套件資料:

函式運算子:

new指標變數=new 資料型別;

例如:int *p=new int

該語句的作用是會用new從記憶體中申請了一個int型變數(4個位元組),並將該變數的首地址賦給指標變數p。

new所建立的變數的初始值是任意的,也可在用new分配記憶體的同時進行初始化。使用形式為:

指標變數=new 資料型別(初始值)。

delete

堆記憶體可按照要求進行分配,程式對記憶體的需求量隨時會發生變化,有時程式在執行種可能會不再需要由new分配的記憶體空間,而且程式還未執行結束,這時就需要把先前佔用的記憶體空間釋放給堆記憶體,以後重新分配,供程式的其他部分使用。運算子delete用於釋放new分配的記憶體空間,刪除建立的物件,它的使用形式為:

delete 指標變數;

其中的指標變數中儲存著new分配的記憶體的首地址。

7樓:**的可樂

要實現根據程式的需要動態分配儲存空間,就必須用到以下幾個函式

1、malloc函式

malloc函式的原型為:

void *malloc (u igned int size)

其作用是在記憶體的動態儲存區中分配一個長度為size的連續空間。其引數是一個無符號整形數,返回值是一個指向所分配的連續儲存域的起始地址的指標。還有一點必須注意的是,當函式未能成功分配儲存空間(如記憶體不足)就會返回一個null指標。

所以在呼叫該函式時應該檢測返回值是否為null並執行相應的操作。

下例是一個動態分配的程式:

#include

#include

main()

for (count=0;count〈10;count++) /*給陣列賦值*/

array[count]=count;

for(count=0;count〈10;count++) /*列印陣列元素*/

printf("%2d",array[count]);

}上例中動態分配了10個整型儲存區域,然後進行賦值並列印。例中if((array(int *) malloc(10*sizeof(int)))==null)語句可以分為以下幾步:

1)分配10個整型的連續儲存空間,並返回一個指向其起始地址的整型指標

2)把此整型指標地址賦給array

3)檢測返回值是否為null

2、free函式

由於記憶體區域總是有限的,不能不限制地分配下去,而且一個程式要儘量節省資源,所以當所分配的記憶體區域不用時,就要釋放它,以便其它的變數或者程式使用。這時我們就要用到free函式。

其函式原型是:

void free(void *p)

作用是釋放指標p所指向的記憶體區。

其引數p必須是先前呼叫malloc函式或calloc函式(另一個動態分配儲存區域的函式)時返回的指標。給free函式傳遞其它的值很可能造成宕機或其它災難性的後果。

注意:這裡重要的是指標的值,而不是用來申請動態記憶體的指標本身。例:

int *p1,*p2;

p1=malloc(10*sizeof(int));

p2=p1;

……free(p2) /*或者free(p2)*/

malloc返回值賦給p1,又把p1的值賦給p2,所以此時p1,p2都可作為free函式的引數。

malloc函式是對儲存區域進行分配的。

free函式是釋放已經不用的記憶體區域的。

所以由這兩個函式就可以實現對記憶體區域進行動態分配並進行簡單的管理了。

8樓:

例如malloc,zizeof,free等原型:extern void *malloc(unsigned int num_bytes);

用法:#include

功能:分配長度為num_bytes位元組的記憶體塊說明:如果分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

當記憶體不再使用時,應使用free()函式將記憶體塊釋放。

舉例:// malloc.c

#include

#include

main()

9樓:匿名使用者

#include

#include

#define str_len 4096

int main ()

怎麼檢視動態分配記憶體空間的大小(c語言)。

10樓:匿名使用者

1、這個空間是自己分配的,既然已經寫了p=(int *)malloc(10000)那就分配10000的大小,還需要顯示多少大小。對於一個指向一塊記憶體的指標如果用比如sizeof(p)顯示大小(int * p=new int[10]),也只是顯示4,代表首地址大小,不能顯示正塊記憶體的大小,而且根本沒有意義。

2、動態記憶體分配,可以自由的分配指定大小的記憶體空間。當程式執行時,程式設計師並不清楚某一資料需要的具體記憶體空間大小時,可以使用動態分配。

malloc函式原型

void *malloc(int nsize)

分配一個nsize大小的記憶體空間,如果分配成功則返回地址空間的首地址,如果分配失敗則返貨null

nsize一般使用 sizeof(型別a)*n 的計算方式獲取大小。意思為:為分配n個型別a所佔空間的大小。

獲取的指標地址需要強制轉換為指定型別

例如:int *p = (int*)malloc(sizeof(int)*100);

使用malloc動態分配的記憶體空間需要使用free函式手動釋放。

11樓:樑丘鴻遠冒睿

在c語言中,要在堆上分配空間,需要使用記憶體申請函式。一般用malloc。

void

*malloc(int

size);

可以申請一段長度為size位元組的空間,並返回空間的首地址。

要清空分配的記憶體空間,也就是將該空間所有位元組均賦值為0,可以使用memset函式。

該函式宣告與string.h中,形式為

void

memset(void

*start,

intvalue,

intsize);

如果要清空空間的首地址為p,大小為len,則可以呼叫memset(p,

0,len);

12樓:匿名使用者

自己malloc出來當然知道位元組大小,如果把指標傳給一個函式呢,函式如果不知道其空間大小,對其操作時是有很大溢位風險的,但我又不想增加一個傳入引數,sizeof()的確算不出指標指向的空間大小,那隻能將指標交給與他人使用的時候,把空間大小也告訴對方。所以有時候沒辦法要妥協一下

只通過指標貌似無法知道指標指向的空間大小,那麼free函式又是怎麼知道呢。malloc在分配空間的時候會多分配一些空間來存放分配資訊。(據說在每個記憶體塊的最前的4個位元組就存放了malloc的位元組大小資訊,可以自己寫一個函式把這些資料提出來,我目前還沒有試驗過)

在c語言中,用malloc函式建立的動態記憶體是連續的嗎?

13樓:勵若

一次分配是連續的,二次直接可能不連續。

比如void* p = malloc(4);

則p指向連續的4個位元組,地址分別是p, p+1, p+2, p+3void* q = malloc(4);

則q也指向連續的4個位元組,地址分別是q, q+1, q+2, q+3但是這兩個函式是挨在一起被呼叫的,p和q它們之間也不一定連續,也就是說可能q != p + 4

14樓:匿名使用者

在有作業系統和虛擬地址管理情況下,一次malloc的記憶體虛擬地址是連續的,實體地址不連續,連續多次malloc的記憶體之間不連續,應該說不一定連續

c語言動態分配記憶體

15樓:想玄彬

要實現根據程式的需要動態分配儲存空間,就必須用到以下幾個函式

1、malloc函式

malloc函式的原型為:

void *malloc (u igned int size)

其作用是在記憶體的動態儲存區中分配一個長度為size的連續空間。其引數是一個無符號整形數,返回值是一個指向所分配的連續儲存域的起始地址的指標。還有一點必須注意的是,當函式未能成功分配儲存空間(如記憶體不足)就會返回一個null指標。

所以在呼叫該函式時應該檢測返回值是否為null並執行相應的操作。

下例是一個動態分配的程式:

#include

#include

main()

for (count=0;count〈10;count++) /*給陣列賦值*/

array[count]=count;

for(count=0;count〈10;count++) /*列印陣列元素*/

printf("%2d",array[count]);

}上例中動態分配了10個整型儲存區域,然後進行賦值並列印。例中if((array(int *) malloc(10*sizeof(int)))==null)語句可以分為以下幾步:

1)分配10個整型的連續儲存空間,並返回一個指向其起始地址的整型指標

2)把此整型指標地址賦給array

3)檢測返回值是否為null

2、free函式

由於記憶體區域總是有限的,不能不限制地分配下去,而且一個程式要儘量節省資源,所以當所分配的記憶體區域不用時,就要釋放它,以便其它的變數或者程式使用。這時我們就要用到free函式。

其函式原型是:

void free(void *p)

作用是釋放指標p所指向的記憶體區。

其引數p必須是先前呼叫malloc函式或calloc函式(另一個動態分配儲存區域的函式)時返回的指標。給free函式傳遞其它的值很可能造成宕機或其它災難性的後果。

注意:這裡重要的是指標的值,而不是用來申請動態記憶體的指標本身。例:

int *p1,*p2;

p1=malloc(10*sizeof(int));

p2=p1;

……free(p2) /*或者free(p2)*/

malloc返回值賦給p1,又把p1的值賦給p2,所以此時p1,p2都可作為free函式的引數。

malloc函式是對儲存區域進行分配的。

free函式是釋放已經不用的記憶體區域的。

所以由這兩個函式就可以實現對記憶體區域進行動態分配並進行簡單的管理了。

如何增加電腦的記憶體空間

提莫送你超神 電腦的記憶體空間 ram 可以通過增加記憶體條來增加。以聯想g400膝上型電腦為例,增加記憶體條操作步驟如下 安裝方法如下 1 先將電腦關機,切斷電源,然後把電池拿下來。2 卸除電腦背部的螺絲,開啟後蓋。3 然後可以看到記憶體條插槽。4 將需要增加的記憶體條插入插槽。5 將膝上型電腦後...

C語言中怎樣定義動態一維陣列,c語言中定義一個動態一維陣列的函式,然後在主函式中使用

天雲一號 在c語言中,陣列的定義都是固定長度的,長度不允許變化。可以通過連結串列的方式來達到定義 動態陣列 的等價功能,舉例如下 連結串列節點定義如下 struct node 存放資料時可以對節點中的node賦值即可,如 struct node p 定義一個連結串列節點p data 3 存放第一個資...

c語言如何增加程式設計能力,C語言,如何增加程式設計能力?

1 多讀別人的程式,要弄懂別人的意思 從簡單的程式開始 2 多寫程式,就算簡單的也好,抄也好,重點幫助記憶和理程式 3 思維與手並用,想到什麼就寫什麼 4 建議借或買一本外國人寫的書看看,如果不是太深入的話可以用國內編寫的書入門,但如果深入學習建議買外國的書,一本是c語言現代程式設計,一本是c程式設...