重拾c语言之动态内存分配

时间:2023-12-31 17:41:57
动态内存分配
传统数组的缺点:
1数组长度必须事先制定,且仅仅能是长整数不能是变量
2传统形式定义的数组该数组的内存程序无法手动释放
3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函数执行结束
4数组的长度不能再函数的执行的过程中动态的扩充或者缩小
5不能跨函数使用
为什么须要动态分配内存
动态内存分配内存举例——动态数组的构造
静态内存分配和动态内存分配
跨函数使用内存的问题 #include<stdio.h>
void f(void)
{
int a[5]={0,1,2,3,4}//无法手动释放要本函数执行完之后要系统释放
}
int main()
{
f();
} #incliude<stdio.h>
#include<malloc.h>
int main()
{
int i=5;/*静态分配*/
/*分配八个字节p存储首地址编号*/int *P=(int *)malloic(4);/* 第二个int *强制转换成int型 *//*表示四个字节可是仅仅用首地址表示*/
free(p);//free(p)表示把p所指向的内存给释放掉
//p本身的内存是不能程序猿手动释放
}/*malloc仅仅能呢过返回首地址*/
p本身所占的内存是静态分配的 p是所指的内存的动态
//malloc函数学习动态内存分配
#include<stdio.h>
void f(int *q)
{
*q=200;
假设这里写free(p);则后面主函数中的无意义
}
int main()
{
int *p=(int*)malloc(sizeof(int))
*p=10;
printf("%d\n",*p);
f(p);
/*free(p);*/这样也是错的由于已经释放内存
printf("%d\n",*p);
} zhan存储结构 堆分配
战区 兑取