动态内存的创建与使用

1.动态内存是什么?
2.如何使用动态内存?
3.动态内存会出现的错误有哪些?

首先要知道什么是静态内存,静态内存指的是函数内部定义的定长的数组,它是向栈中申请需要内存。栈是一个放置比较小内存的地方,栈的大小大约是1M左右 (1024*1024)
当我们需要在函数中使用n个数未知数,这n个未知数又要作为一个数组的组数的时候 ,就要使用动态内存。动态内存的使用它是向系统中的堆申请连续的你需要的内存,比如我需要1G,那么因为栈的有限,不满足申请条件。它就向堆中申请1G的连续的内存。根据变量定义数组的长度。对于堆来说,最大连续内存大约1.2G,不绝对!
举例:
筛选法求素数
#include <stdio.h>
#include <assert.h> //断言需要的头文件
#include <stdlib.h> //动态内存需要的头文件
#include <vld.h> //内存释放需要的头文件
void Sifiprime(int n)
{
int *arr=(int )malloc(nsizeof(int )); //向系统申请n个数组单位
assert(n!=NULL); //保证n不为空

for(int i=0;i<n;i++)
{
	arr[i]=1;
}
arr[0]=0,arr[1]=0;                             //把除过0和1的数组全部重置为1
for(int i=2;i<n;i++)                           //从i=2开始跑循环
{
	for(int j=i+1;j<n;j++)                     //j从3开始跑
	{
	
		if(j%i==0)                            //如果等于0说明有因子 不是素数
	{
		arr[j]=0;                              //把下标取余等于0的数组元素等于o
	}
	}
}
for(int i=0;i<n;i++)                    
{
	if(arr[i]==1)                           //把数组元素不是0的元素输出
	{
		printf("%d\n",i);
	}
}

}
int main()
{
Sifiprime(200);
return 0;
}
这个程序运用了动态内存申请n个整型数组单位,此时会出现一个问题就是内存泄漏
内存泄漏和数组越界是C语言比较大的问题,如何防止内存泄漏呢?
在程序中用到Free去释放内存
一般来说,泄露的内存如何还回来:①程序(进程)退出②系统关机

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值