記憶體四區-堆區
堆區:
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++就會報錯。