重拾c语言之动态内存分配
2024-10-21 15:36:36
动态内存分配
传统数组的缺点:
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存储结构 堆分配
战区 兑取
最新文章
- vue.js的一些知识点
- NAnt打包使用MSTest进行单元测试的配置
- EmguCV 轮廓匹配
- table相关的API
- jQuery动态加载脚本 $.getScript();
- java产生不重复的随机数
- ACE_linux:TCP通信
- 索引列上的统计 <;第一篇>;
- 一个ShellExecute的超全说明(www.phidels.com这个网站很多内容)
- C语言学习之递归
- 【转】matlab针对不同格式文件的读写
- <;Android基础>; (七)内容提供器
- DB2 数据库的安装配置及监控
- 跳出语句break 和continue
- squid http,https, 代理,默认端口3128
- [转]springcloud(九):配置中心和消息总线(配置中心终结版)
- phantomjs 长图截屏
- asp.net本地读取excel正确。但在iis服务器上就报错 未在本地计算机上注册“Microsoft.ACE.OleDb.12.0”提供程序
- php新特性:trait 关键字使用
- 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)
热门文章
- [AngularFire] Angular File Uploads to Firebase Storage with Angular control value accessor
- [Redux-Observable &;&; Unit Testing] Mocking an ajax request when testing epics
- 【项目基础】容器、AOP理论篇
- Visual Studio Code配置GoLang开发环境
- 后台vb校验是否GUID
- Angular:了解Typescript
- Vue 消息无缝滚动
- Robot Framework初步使用
- Mongodb总结6-数据库启动、停止、备份等命令
- Mahjong tree (hdu 5379 dfs)