IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】解析动态内存分配函数——malloc()函数、calloc()函数、realloc()函数 -> 正文阅读

[C++知识库]【C语言】解析动态内存分配函数——malloc()函数、calloc()函数、realloc()函数

CSDN话题挑战赛第2期
参赛话题:学习笔记


目录

?前言

1.malloc()函数

函数参数

?函数使用实例

2.calloc()函数?

?函数参数

函数使用实例?

3.reaclloc()函数

函数参数?

?函数使用实例


?前言

动态内存和使用静态内存的对比:

? ?静态内存空间开辟大小是固定的建立在栈上,不管用多少都会开辟指定大小,并且无法释放;反观动态内存空间开辟在堆上,不管开辟多少,最终会释放。


头文件:stdlib.h


注:C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收的,函数原型

void free (void* ptr);

1.malloc()函数

函数参数

开辟一个大小位size(字节)的连续空间,若开辟成功返回类型是一个无符号类型的指针,若开辟不成功就返回空指针(NULL)。

void* malloc (size_t size);

?函数使用实例

include <stdio.h>
int main()
{
 int* ptr (int*)malloc(40);
 if(NULL != ptr)//判断ptr指针是否为空
 {
     int i = 0;
     for(i=0; i<10; i++)
     {
     *(ptr+i) = 0;
     }
 }
 free(ptr);//释放ptr所指向的动态内存
 ptr = NULL;
 return 0;
}

2.calloc()函数?

?函数参数

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0,若开辟成功返回类型是一个无符号类型的指针,若开辟不成功就返回空指针(NULL)。

该函数相当于malloc()函数+memset()函数的结合体。

void* calloc (size_t num, size_t size);

函数使用实例?

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int *p = (int*)calloc(10, sizeof(int));
 if(NULL != p)
 {
     int i = 0;
     for(i=0; i<10; i++)
     {
     *(p+i) = 0;
     }

}
 free(p);
 p = NULL;
 return 0;
}

?

3.reaclloc()函数

函数参数?

将ptr指到的地方扩大(缩小)到size大小。

返回值为调整之后的内存起始位置。

void* realloc (void* ptr, size_t size);

?该函数使用时有两者情况:

情况一:原有空间之后有足够大的空间

要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。

情况二:原有空间之后没有足够大的空间

原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 由于上述的两种情况,realloc函数的使用就要注意一些。

?函数使用实例

#include <stdio.h>
int main()
{
 int *ptr = (int*)malloc(100);
 if(ptr != NULL)
 {
     //业务处理
 }
 else
 {
     return 1;    
 }
 //扩展容量
 //代码1
 ptr = (int*)realloc(ptr, 1000);
 
 //代码2
 int*p = NULL;
 p = realloc(ptr, 1000);
 if(p != NULL)
 {
 ptr = p;
 }
 //业务处理
 free(ptr);
 return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:33:07  更:2022-09-30 00:35:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:07:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码