当前位置: 首页 > 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.lryc.cn/news/586417.html

相关文章:

  • AD芯片(模数转换器)的有效位数(ENOB)
  • scrapy项目开发流程
  • C++中的容斥原理
  • Springboot aop面向切面编程
  • 虚拟商品交易维权指南:数字经济时代的消费者权益保护
  • Boost.Asio 中的定时器类 steady_timer
  • python如何把两张图片拼成一张
  • Gitee Push 失败 7 日谈:每天一个踩坑故事
  • Java中的方法传参机制
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘multiprocessing’问题
  • QT跨平台应用程序开发框架(6)—— 常用显示类控件
  • 使用FastAdmin框架开发
  • Java项目2——增强版飞机大战游戏
  • 【极客日常】后端任务动态注入执行策略的一种技术实现
  • R 语言绘制 10 种精美火山图:转录组差异基因可视化
  • 算法第三十一天:贪心算法part05(第八章)
  • CCF CSP第一轮认证一本通
  • 【理念●体系】模板规范篇:打造可标准化复用的 AI 项目骨架
  • 一分钟快速了解Apache
  • Redis集群会有写操作丢失吗?为什么?
  • 动态规划基本操作
  • 从LLM到VLM:视觉语言模型的核心技术与Python实现
  • FastAdmin项目开发三
  • (LeetCode 面试经典 150 题 )3. 无重复字符的最长子串 (哈希表+双指针)
  • 回归(多项式回归)
  • 算法练习6-大数乘法(高精度乘法)
  • Linux系统中部署Redis详解
  • (C++)STL:list认识与使用全解析
  • OpenEuler操作系统测试USB摄像头
  • The Black Heart