内存四区笔记
来源:互联网 发布:同花顺数据接口api 编辑:程序博客网 时间:2024/06/05 17:53
#include <stdio.h>#include <stdlib.h>#include <string.h>void print_arr(int *buf, int n) { int i; for (i = 0; i < n; ++i) { printf("%d\n", buf[i]); }}int main() { int array[100] = {0}; //栈中数组 // void *malloc (size_t __size) char *p1 = malloc(sizeof(char) * 1000); free(p1); int *p = malloc(sizeof(int) * 100); //在堆中申请内存,大小为100个int,当数组用 memset(p, 0, sizeof(int) * 100); //初始化 int i; for (i = 0; i < 100; ++i) { p[i] = i; } print_arr(p, 100); free(p);}
#include <stdio.h>#include <stdlib.h>//既要申请内存,又要有变量指向该内存,这样此时有效的,缺一不可。//内存释放与否 VS 作用域规则 是两码事//只不过栈中变量随作用域具有一致性,出了作用域,栈内存也释放了//而堆中变量出了作用域,变量失效,但堆内存若没有手动释放,则依然存在//严重错误void getheap(int *p) { p = malloc(sizeof(int)); //getheap执行完后,p就消失了,导致指向具体堆空间的地址编号也随之消失了}//改正,利用二级指针void getheap1(int **p){ *p = malloc(sizeof(int));}int main7() { int *p = NULL; getheap(p);//值传递,实参没有任何变化 getheap1(&p);//正确 free(p);}//错误,不能将一个栈变量的地址通过函数的返回值返回,函数运行结束(出了作用域),栈地址就自动释放了,相当于野指针int *geta() { auto int a = 10; return &a;}//正确,可以通过函数的返回值返回一个堆地址,但记得,一定要freeint *geta1() { int *p = malloc(sizeof(int)); return p;}//正确,a在静态区,不用freeint *geta2() { static int a = 0; return &a;}int main6() { int *getp = geta1(); *getp = 100; free(getp);}
0 0
- 内存四区笔记
- C笔记--内存四区
- 内存四区的笔记
- 内存四区解析
- 内存四区
- 关于内存四区
- 内存四区模型
- 内存四区
- 内存四区模型
- 内存四区
- 内存四区
- 内存四区
- 内存四区
- 内存四区模型
- 内存四区
- 内存四区简介
- 内存四区
- jvm学习笔记四--内存调优
- 《数值分析》总结
- 网络篇——android中的Http(一)之Http协议基础
- CSDN code 心得
- <h1 class="title">jquery的checkbox,radio,select等方法总结</h1> <div class="meta"><time datetime="201
- px4开发指南——linux下qgroundcontrol地面站安装
- 内存四区笔记
- 相邻数字的基数等比:确定进制
- asp.net 连接oracle 数据库-OracleClient使用
- poj2823 单调队列 ------scanf/printf/G++/C++
- [源码分析][Linux]READ_ONCE与WRITE_ONCE
- MYSQL数据库导入数据时出现乱码的解决办法
- js数组去重
- log4j:WARN No appenders could be found for logger
- MySQL字符集的校对规则(collation rule)