C語言動態記憶體分配

2021-06-19 08:29:32 字數 2522 閱讀 9366

c語言動態記憶體分配

動態資料結構可以在執行時靈活新增、刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下:

malloc   分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標

calloc    為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標

free      釋放前面已分配的空間

realloc    修改前面已分配空間的大小

知識點一:用malloc函式分配一塊記憶體,如:int *x;x=(int*)malloc(100*sizeof(int));

如:char *cptr;cptr=(char *)malloc(10);如:st_var=(struct store *)malloc(sizeof(structstore));

程式一:使用乙個整數表,顯示其記憶體分配空間;

#include"stdio.h"

#include"stdlib.h"

#define null 0

main()

int*p,*table;

intsize;

printf("\n輸入資料表的大小?");

scanf("%d",&size);

printf("\n");

if((table=(int*)malloc(size*sizeof(int)))==null)  //測試所需記憶體大小的可用性

printf("沒有可用的空間分配\n");

exit(1);

printf("\n輸入資料表的值\n");

for(p=table;pscanf("%d",p);

for(p=table+size-1;p>=table;p--)

知識點二:用calloc函式分配多個記憶體塊,calloc在執行時儲存派生資料型別(如陣列和結構體)而分配的儲存空間。malloc分配的是單個儲存塊,而calloc分配的是多個儲存塊,每個塊大小相等。

如:ptr=(型別 *)calloc(n,元素大小);

例項:struct student

charname[25];

floatage; 

longint id_num;

typedef struct student record;

record *st_ptr;

int class_size=30;

st_ptr=(record*)calloc(class_size,sizeof(record *));

//分配了30個記錄的空間,每塊的大小為結構體大小,它有3個成員。

確保分配空間成功,用如下判斷:

if(st_ptr=null)

printf(「記憶體不能分配」);

exit(1);

知識點三:用free函式釋放已用的空間,對執行的記憶體分配,當不再需要時,由程式設計師負責釋放,如:free(ptr); 注意兩件事:

1) 所釋放的不是指標本身,而是它所指向的內容。

2) 要釋放由calloc分配的記憶體陣列,只需要釋放該指標一次即可。

知識點四:用realloc函式改變記憶體塊的大小,這個過程稱為記憶體重新分配。例如,如果原始記憶體分配是用下面語句完成的:

ptr=malloc(size);

那麼,就可以用下面的語句來重新分配:

ptr=realloc(ptr,newsize);

如果函式沒有成功分配更多空間,將返回乙個空指標,有必要測試下操作是否成功。

程式四:把乙個字串儲存在由malloc建立的記憶體塊中,然後修改它以儲存更大的字串。

#include"stdio.h"

#include"stdlib.h"

#define null 0

main()

char*buffer;

if((buffer=(char*)malloc(10))==null)

printf("mallocfailed!");

exit(1);

printf("bufferof size %d created\n",_msize(buffer));//大小

strcpy(buffer,"hyderabad");  //初始字串

printf("\nbuffercontains:%s \n",buffer);

if((buffer=(char*)realloc(buffer,15))==null)  //重新分配

printf("realocationfailed!\n");

exit(1);

printf("\nbuffersize modfied.\n");

printf("\nbufferstill contains:%s \n",buffer);

strcpy(buffer,"secunderbad");//修改後的字串

printf("\nbuffernow contains:%s \n",buffer);

free(buffer);

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

C語言 動態記憶體分配

c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...

C語言 動態記憶體分配

動態記憶體分配 一.記憶體的五個分割槽 1.棧區後進先出,從高到底分配記憶體 int a 2 int b 3 printf 棧區 p n a printf 棧區 p n b 2.堆區 堆區分配記憶體,從低到高 堆區的記憶體由我們自己進行分配和釋放 int c malloc 10 printf 堆區 ...