内存四区-堆区
堆区:
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++就会报错。