2017年7月7日 星期五

malloc() 動態設置記憶體


int *ptr = malloc(sizeof(int));

void *malloc(size_t size)

size 所需記憶體區塊大小的byte數

回傳值是指向所指定的記憶體區塊的指標,失敗的話回傳NULL


#include <stdio.h>
 #include <stdlib.h> 

int main(void) 
  int *ptr = malloc(sizeof(int));
  printf("空間位置:%p\n", ptr);
  printf("空間儲存值:%d\n", *ptr);
  *ptr = 200;
  printf("空間位置:%p\n", ptr);
  printf("空間儲存值:%d\n", *ptr);
  free(ptr);
  return 0;
}


執行結果:

空間位置:0xb27010 
空間儲存值:0 
空間位置:0xb27010 
空間儲存值:200

如果使用了 malloc 分配動態記憶體,可是卻沒有使用 free 歸還記憶體,可能會發生記憶體用盡的情況。

陣列在使用的時候,必須事先決定好陣列的大小,有時候一開始不知道會使用多大的陣列,或是希望由使用者來自定大小,就可以使用動態記憶體配置,加上指標來實作。

int *arry = malloc(1000 * sizeof(int));

此行分配了 1000 個 int 大小的空間,並傳回空間的第一個位址配置後的空間資料是未知的。可以使用 calloc() 來宣告空間配置。

int *arry = calloc(1000, sizeof(int));

分配了 1000 個 int 大小的空間,並將空間裡的所有值初始化成 0。在使用 malloc 或是 calloc 進行記憶體配置,在不使用時,應該使用 free() 釋放記憶體。



參考:
https://openhome.cc/Gossip/CGossip/MallocFree.html


沒有留言:

張貼留言