1. 程式人生 > >記憶體四區-堆區

記憶體四區-堆區

堆區:

   malloc的記憶體空間,new的記憶體空間都是放在堆中。  

因為堆區記憶體空間的生命週期歸作業系統管理,函式執行完後堆區物件不會被析構掉,也沒有被程式設計師主動析構的話,可以在呼叫函式裡使用該記憶體空間。

用程式碼瞭解下堆區:

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

char * getMem(int num)
{
  char *p1 = NULL;
  p1 = (char *)malloc(sizeof(char)*num);//申請num個char長度的記憶體空間 
  if(p1 == NULL)
  {
    return NULL;
  }
  return p1;
}

int main()
{
  char *tmp = NULL;
  tmp = getMem(10); //tmp是區域性變數,放在棧區,它指向申請到的這10個位元組的記憶體空間。malloc申請的這段記憶體位於堆中 
  if(NULL == tmp) //相等判斷最好把變數放到後面,因為如果把==錯寫成=的話會報錯,如果你錯寫成 if(tmp = NULL) if條件是成立的。
  {
    return;
  }
  strcpy(tmp, "111222"); //向tmp指向的記憶體空間中copy資料,而不是向tmp中copy資料

  printf("%s \n", tmp);//列印指標p1,p2所指向的記憶體空間的資料 
  system("pause");
  return 0;
}

執行結果:

 

PS: 最好不要直接從部落格中拷貝程式碼,會包含有中文空格,有的編譯器會報錯的。比如DevC++就會報錯。