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

相关文章:

  • 【时间之外】AI在农机配件设计场景的应用
  • bp使用爆破模块破解pikachu的登陆密码
  • java堆的创建与基础代码解析(图文)
  • BKD 树(Block KD-Tree)Lucene
  • TCP与UDP协议详解:网络世界的可靠信使与高速快递
  • UnityShader——SSAO
  • 微信小程序121~130
  • 时序分解 | Matlab基于GWO-FMD基于灰狼算法优化特征模态分解-2025-7-12
  • 直播录屏技术揭秘:以抖音直播录屏为例
  • LLM 不知道答案,但是知道去调用工具获取答案?
  • 基于STM32F412+RT-Thread的智能汽车CAN通信仪表盘
  • ADSP-1802这颗ADI的最新DSP应该怎么做开发(一)
  • JavaScript 常见10种设计模式
  • TCP详解——各标志位
  • linux 系统找出磁盘IO占用元凶 —— 筑梦之路
  • Java从入门到精通!第四天(面向对象(一))
  • HTTP和HTTPS部分知识点
  • python库之jieba 库
  • 模拟注意力:少量参数放大 Attention 表征能力
  • C#与FX5U进行Socket通信
  • 【设计模式】桥接模式(柄体模式,接口模式)
  • OneCode 3.0架构深度剖析:工程化模块管理与自治UI系统的设计与实现
  • 企业商业秘密保卫战:经营信息类案件维权全攻略
  • 分布式系统高可用性设计 - 缓存策略与数据同步机制
  • wedo稻草人-----第32节(免费分享图纸)
  • 实验一 接苹果
  • LeetCode经典题解:3、无重复字符的最长子串
  • ADI的EV-21569-SOM核心板和主板转接卡的链接说明
  • Kubernetes持久卷实战
  • 13. G1垃圾回收器