C 内存分配 内存释放 calloc free 方法的使用
API
在 stdlib.h
头文件中,有如下API:
其中:
- 分配内存:
void* calloc(单元数, 单个单元占用字节数)
申请内存的字节数 = 单元数 * 单个单元占用字节数 - 释放内存:
void free(void*)
malloc 方法参数没有 calloc 方便。
而 realloc 用于重新申请内存(扩容)。
Code
注意 p[i]
和 *(p + i)
两种写法(寻址方式)都可以指示对应元素。
//
// main.c
// alloc-内存分配
//
// Created by wuyujin1997 on 2023/2/20.
//#include <stdio.h>
#include <stdlib.h>int main(int argc, const char * argv[]) {int COUNT = 5;
// int* p = (int*) malloc(COUNT * sizeof(int));int * p = (int*) calloc(COUNT, sizeof(int));// 遍历+赋值。两种赋值方式: p[i] 和 *(p + i)for (int i = 0; i < COUNT; i++) {p[i] = 11 * i;// *(p + i) = 11 * i; // 与上一行赋值方式(寻址方式)等效}// 遍历+打印。两种取值方式: p[i] 和 *(p + i)for (int i = 0; i < COUNT; i++) {printf("元素内存地址:%p 下标:%d 值:%d %d\n", p+i, i, p[i], *(p + i));}free(p);for (int i = 0; i < COUNT; i++) {printf("元素内存地址:%p 下标:%d 值:%d %d\n", p+i, i, p[i], *(p + i));}return 0;
}
Output:
元素内存地址:0x600000203360 下标:0 值:0 0
元素内存地址:0x600000203364 下标:1 值:11 11
元素内存地址:0x600000203368 下标:2 值:22 22
元素内存地址:0x60000020336c 下标:3 值:33 33
元素内存地址:0x600000203370 下标:4 值:44 44
元素内存地址:0x600000203360 下标:0 值:-561171616 -561171616
元素内存地址:0x600000203364 下标:1 值:48813 48813
元素内存地址:0x600000203368 下标:2 值:2043 2043
元素内存地址:0x60000020336c 下标:3 值:0 0
元素内存地址:0x600000203370 下标:4 值:0 0
Program ended with exit code: 0
参考
Dynamic Memory Allocation in C using malloc(), calloc(), free() and realloc()
C 内存分配 内存释放 calloc free 方法的使用相关推荐
- c语言释放内存函数,【C语言】内存分配函数malloc/ calloc/ realloc及内存释放free
前言: 内存区域划分与分配: 1.栈区(stack)--程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等,程序结束时由编译器自动释放. 2.堆区(heap) -- 在内存开辟另一块存储区域 ...
- C/C++动态二维数组的内存分配和释放
C语言: 1 //二维数组动态数组分配和释放 2 //数组指针的内存分配和释放 3 //方法一 4 char (*a)[N];//指向数组的指针 5 a = (char (*)[N])malloc(s ...
- C++/C--动态二维数组的内存分配与释放【转载】
1 C语言_二维数组动态数组分配和释放 1.1 数组指针的内存分配和释放 //方法一 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(cha ...
- C语言中多维数组的内存分配和释放(malloc与free)(转)
C语言中多维数组的内存分配和释放(malloc与free)(转) 写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误.下面贴上一些示例代码,以供参考. 如果要给二维数组( ...
- v11.03 鸿蒙内核源码分析(内存分配) | 内存有哪些分配方式 | 百篇博客分析HarmonyOS源码
子曰:"君子周而不比,小人比而不周."<论语>:为政篇 百篇博客系列篇.本篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式 内存管理相关篇为 ...
- C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
1.介绍 3个函数都在<stdlib.h>头文件 1).void* malloc(unsigned size); 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需 ...
- malloc 初始化_关于内存分配malloc、calloc、realloc的区别
(1) malloc() 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址 (2) calloc() 与malloc相似,参数sizeOf ...
- c语言内存分配与释放 不同类别变量的内存分配和释放的区别
1.不同变量使用内存的区别 静态存储类别的变量:内存数量在编译时确定,程序开始执行时创建,程序结束时销毁.(static.const) 自动存储类别的变量:程序进入变量定义所在块时存在,离开块时销毁. ...
- CUDA内存分配、释放、传输,固定内存
/** 内存分配* if failed, return cudaErrorMemoryAllocation */cudaError_t cudaMalloc(void **devPtr, size_t ...
最新文章
- Linux获取系统当前时间(精确到毫秒)
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
- 有没有办法检查`null`和`undefined`?
- objdump and readelf
- 九齐51单片机使用注意事项:不要用float
- Leetcode--78. 子集
- java线程集合点_Jmeter集合点(线程组和同步定时器)
- 最新dotCMS SQL注入漏洞 攻击者可获得敏感数据 绿盟科技发布安全威胁通告
- 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决
- hive大字段拼接与切割实战(一个大字段保存每天历史数据)
- 富勒wms系统里的定时器id_仓储、运输配送供应链管理系统解决方案以及应用领域区别...
- 200以后最小质数:
- 移动Ad Hoc网络路由协议汇总
- 身份证号码中间位数隐藏
- “微笑妹妹”9岁撑起一个家
- uni-table单元格中预览图片:阻止冒泡
- 让研发团队找准市场需求
- 云服务器系统镜像选什么,云服务器系统镜像选什么用
- 微信美化版qu水印小程序源码分享 附接口
- matlab复数矩阵 画图,包含矩阵、复数的函数画图问题,请赐教