C语言之动态内存分配
来源:互联网 发布:淘宝卖家代理怎么发货 编辑:程序博客网 时间:2024/06/04 20:03
//解决方案:让空间在函数执行完毕之后,系统不会收即可,定义成全局变量或者静态变量,或者再堆区开辟空间.
/** * 存储区的划分:
(1)栈区:栈区存储局部变量,栈区的内存是由系统自动管理,系统开辟,系统回收,无需程序员管理.
(2)堆区:通过堆区内存分配函数,分配的空间都在堆区,堆区的最大特点:堆区的空间需要程序员手动管理,手动开辟,手动释放.(OC常用)
(3)常量区:对于字符常量,整形常量,浮点型常量,字符串常量统一存储在该区,该区的内存由系统自动管理,特点:常量区的内容不可修改.
(4)静态区,全局区:存储全局变量以及静态变量.内存由系统管理,但是在程序的运行期间空间都不会释放. (5)代码区:编译之后形成的CPU指令存储在该区. 概念: 局部变量:在函数内部定义的变量,数组.(栈区)
全局变量:在函数外部定义的变量,数组.(全局区) 静态变量:由static修饰的变量.(静态区) */
//堆区内存分配函数
//malloc,需要指定需要开辟的空间大小
//返回在堆区开辟的空间的地址
//void *是一个泛型,可以代表所有的指针类型 /
/比如: char *, int *, float *, Student *,
char*p =malloc(8);//确定开辟的空间要存储的数据
//p = "android"; //常量区变量不可更改.
strcpy(p,"Android");
printf("%s\n", p + 4);
*(p +4) ='b';
printf("%s\n", p + 3);
free(p);//释放堆区内存,删除只是标记删除,不会删除内容
//free(p);
//1.野指针错误
//产生原因:访问不该访问(已经没有使用权,空间已经释放,还给系统)的内存.
//解决方案:释放内存的所有权的同时将地址也清除掉.
p =NULL;域
//2.过度释放
//产生原因:对一块内存释放(free)多次.
//解决方案:保证只释放(free)一次,将其他的释放操作删掉.(会立即carsh)
//3.内存泄露
//产生原因:分配了内存使用完以后,没有释放掉,造成内存堆积,最后会因为没有内存可分配,而造成程序crash//解决方案:使用玩内存后,要将内存立即释放掉.
//让指针变量p指向一个明确的空间,而且空间必须是可控的.
char*p =0x1000000789;
*p ='a’;
inta =0;
printf("请输入一个整数:\n");
scanf("%d", &a);
charstr[20] ="iPhone";
// printf("%s%d\n", str, a);
/** * printf:用来将内容输出到控制台
sprintf:用来将内容输出到内存中 */
sprintf(str,"iPhone%d", a);
printf("%s\n", str);
- 10.C语言之动态内存分配
- c语言基础之动态内存分配
- C语言之动态内存分配
- C语言之动态内存分配
- C语言之动态内存分配
- C语言之动态内存分配malloc
- C语言之动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- C语言 动态内存分配
- C语言动态内存分配
- c语言:动态内存分配
- C语言-动态内存分配
- c语言-动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- c语言 动态内存分配
- 黑马程序员_反射
- C语言 回调函数的使用:(实例对比)
- sizeof运算符
- 【足迹C++primer】59、模板左值右值的转换
- lightoj 二分题简要题解
- C语言之动态内存分配
- 13.1 Triangle
- 【足迹C++primer】60、重载和模板
- 指针与结构体、函数指针
- 九大排序算法再总结
- 网站建设所需要考虑的架构问题
- js封装tab选项卡--半完成,纯代码框架(原创)
- C语言求200`300之间的所有素数
- 如果遇到实验室事故