当前位置: 首页 > news >正文

C语言基础知识--动态内存管理

// 动态内存管理
// 1、malloc 和 free 函数
// void *malloc(size_t size); // 开辟size 个大小的内存块
// int *p = (int *)malloc(sizeof(int));
// 2、动态内存可以调节, 释放内存后, 可以再次使用
// 3、malloc 函数返回的是 void * 类型, 需要进行强制转换
// 4、如果开辟成功, 返回的是一个指针, 否则返回 NULL
// 5、malloc 和数组的空间区别?
// 6、动态内存的大小是可以调整的
// 7、开辟空间的位置不一样:
// 栈区:局部变量、函数形式参数。
// 堆区:动态开辟的内存,malloc、free 、calloc、realloc。静态区:全局变量,static修饰的静态变量
// 8、返回类型是 void* 所以不知道开辟的类型,在调用时决定
// 9、如果size 为0,标准是未定义的,一般返回NULL// int main () {
//    // apply memory
//    int *p = (int *)malloc(sizeof(int));
//    if (p == NULL) {
//       printf ("申请内存失败\n");
//       perror("malloc");
//       return 1;
//    }
//    // use memory
//   int i = 0;
//   for (i = 0; i < 10; i++) {
//      *(p+i) = i +1;
//      // *p = i;
//      printf ("%d\n", *p+i);
//   }
//   // release  memory
//   // if not free memory, sys will auto release memory when process exit.
//   free (p);
//   p = NULL; // be released memory, avoid memory leak,impart null  pointer.
//   return 0;
// }
// 10、malloc 和 free 最好成对使用// 11、calloc 开辟内存, 默认初始化为 0
// int *p = (int *)calloc(1, sizeof(int));// int main()
// {
//   // apply  memory
//   int *p = (int *)calloc (10, sizeof(int));
//   if (p == NULL)
//   {
//
//     perror("calloc");
//     return 1;
//   }
//  // use  memory
//   int i =0;
//   for (i = 0; i < 10; i++)
//   {
//     p[i] = i;
//    printf ("%d\n", p[i]);
//   }
//   // free memory
//   free(p);
//   p = NULL;
//   return 0;
// }// 7、realloc 函数
// p 是要调整的内存地址 , size 是要调整的大小
// int *p = (int *)malloc(sizeof(int));
// *p = 10;
// int *newp = (int *)realloc(p, 2 * sizeof(int));
// realloc 调整空间时,有两种情况
// 1、空间不够,在内存的堆区则申请新满足大小的空间,并把原数据拷贝到新空间,释放旧的空间,并返回新空间地址
// 2、空间够,则直接返回旧地址// int main() {
//   // 申请内存
//   int *p = (int *)malloc(sizeof(int));
//   if (p == NULL) {
//     perror("malloc");
//     return -1;
//   }
//   // 调整空间
//   *p = 10;
//   int *newp = (int *)realloc(p, 4 * sizeof(int)); // 不能再次赋给p 只能新建一个,realloc 第一个参数必须是旧地址
//   if (newp != NULL) {
//      p = newp; 
//   }
//   else {
//     perror("realloc");
//   }
//   // 使用
//   int i = 0;
//   for (i = 0; i < 16; i++) {
//     *(p + i) = i;
//     printf("%d\n", *(p + i));
//   }
//   // 释放
//   free(newp);
//   newp = NULL;
//   return 0;
// }
//
http://www.dtcms.com/a/276617.html

相关文章:

  • 贪心算法题解——划分字母区间【LeetCode】
  • 操作系统—第三章 内存管理
  • 169. 多数元素
  • 二分搜索 (左程云)
  • 【Docker基础】Dockerfile核心概念解析:什么是Dockerfile?与镜像、容器的关系
  • shiro550反序列化漏洞复现(附带docker源)
  • AV1比特流结构
  • zynq-PS篇——bperez77中DMA驱动注意事项
  • 车载以太网-旁路配置
  • MyBatis基于XML配置详细使用指南
  • IMU姿态传感器
  • 栈题解——最小栈【LeetCode】
  • 学历一般,基础一般还有必要刷算法题吗
  • 一种Φ325海底管道机械三通结构设计cad【1张】三维图+设计说明书
  • python学习笔记【1】对字符串的处理
  • 网络安全day1-2笔记
  • kettle从入门到精通 第101课 ETL之kettle DolphinScheduler调度kettle
  • RAG进阶之术:用“父子Chunk”策略破解复杂查询的“上下文迷局”
  • Win11怎样进入WinRE恢复环境
  • 并发--Callable vs Runnable
  • 深入理解 Boost.Asio 中的异步核心 boost::asio::io_context
  • AI智能体|扣子(Coze)搭建【裸眼3D著名故事动画视频】工作流
  • NOIP普及组|2005T1淘淘摘苹果
  • 常用控件QWidget
  • 部署Harbor私有仓库
  • 第五章 RAG知识库进阶
  • Java项目2——增强版飞机大战游戏
  • Linux:信号
  • Redis持久化机制:RDB和AOF
  • 【面试八股文】2025最新软件测试面试