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去释放内存
一般来说,泄露的内存如何还回来:①程序(进程)退出②系统关机