内存四区-堆区

堆区:

   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++就会报错。

 

posted on 2019-01-05 10:46  锋邢天下  阅读(343)  评论(0编辑  收藏  举报

导航