如何在堆上创建内容C语言

C语言在堆上创建内容需要用到malloc 并且包括头文件<stdlib.h>
若是C++ 是new 和 delete
C++11中智能指针解决防止内存泄漏的问题。具体不再此篇讲解。

注意:在堆上创建的空间不会自动释放 ,需要手动free掉,并把指针置空
要是指针丢了还没释放就会造成内存泄漏,影响程序的性能,可用空间减少,直到程序关闭,停机,操作系统收回。所以不用空间了,就要立刻释放掉,然后指针一定要归位为NULL。

为什么要指针归位?
答:可能产生野指针
为了更好的理解。附上图片说明

在这里插入图片描述
一开始指针指向我开辟的空间内的8这个变量的地址,但是我free掉的只是这个空间的内容,说明在操作系统中是不可访问的区域了,但是我指针的内容依旧是指向这块地址的,指向了一块非法的空间,说明指针不是空的,这样还是下次可以给他赋值,接着使用,但是这样就会造成不知道指针指向的是什么内容,也就是所谓的野指针。
指针中有个不成文的规矩:判断指针是否可用就看是不是空的。
指针如果是空的,就不可用,非空则可用。

什么是野指针,野指针的成因和规避详情可见网址,

百度的官方总结

《深入理解c++11》 在介绍智能指针这节对野指针的定义以及什么是内存泄漏:
野指针:一些内存单元已经释放,之前指向他的指针却还在被使用。这些内存有可能被运行时系统重新分配给程序使用,从而导致了无法预测的错误。
内存泄漏:不再需要使用的内存单元如果没有被释放就会导致内存泄漏。如果程序不断重复进行这类操作,将会导致内存占用剧增。
额外说下重复释放是什么意思:
重复释放:程序试图去释放已经被释放过的内存单元,或者释放已经被重新分配过的内存单元,就会导致重复释放错误。通常重复释放内存会导致C/C++运行时系统打印出大量错误及诊断信息。
《C++ primer plus》 中对堆栈和内存泄漏的讲解 在P117

总结:为什么free? 答:避免内存泄漏
为什么归位?答:避免产生野指针

在堆上创建一个整型

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   
	//在堆上分配一个一维数组
	int *pA = (int*)malloc(sizeof(int));
	*pA = 8;
	printf("%i\n", *pA);
	
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值