首页 > 其他分享 >malloc()函数

malloc()函数

时间:2023-01-19 15:58:15浏览次数:38  
标签:malloc 函数 int void 内存空间 size

1、malloc()函数

malloc()函数的头文件是stdlib.h,其函数声明如下:

void* malloc(size_t size);

其中参数size_t size表示动态内存分配空间的大小,以字节为单位。

size_t 是typedef重定义的类型,重定义这样数据类型的作用就是让使用者一目了然,指示使用者这个参数表示一个长度,在 size后加上t,表示是整型相关数据类型的,以后看到xxx_t的类型,通常都是整型相关数据类型重定义。

在这里malloc()函数的返回值是一个指针,或者说是分配后内存空间的首地址

如果malloc()函数申请空间成功则返回一段内存空间的首地址,失败则返回NULL

2、int *p;

p = malloc(sizeof(int));

在这里是不能这样写的,会出现错误:从类型 'void*' 到类型‘int’的转换无效,应该改为:

p =(int *) malloc(sizeof(int));

3、memset()函数

在使用malloc()函数申请的空间之前,最好用memset()函数把这段内存空间清理一下,因为用malloc()函数申请的空间仅仅保 证的是内存空间的大小,并不保证内存空间是否有数据垃圾

4、释放内存空间

当不在使用malloc()函数申请的空间之后,应该使用如下函数释放掉这个内存空间:

void free(void *ptr);

其中void *ptr是malloc()函数的返回值,也就是内存空间的首地址

如果只知道使用,而不知道释放,则在7天*24小时运行的嵌入式产品中,很容易会出现内存泄漏,最终导致系统瘫痪

5、栗子

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;


int main()
{
    char* p;//(1)定义一个char*型指针变量p
    p = (char*)malloc(10 * sizeof(char));//(2)为p分配10个字节的内存空间

    memset(p, 0, 10 * sizeof(char));

    strcpy(p, "come on");//(3)复制"come on" 字符串到p指向的内存空间
    cout << "p: " << p << endl;

    p = (char*)realloc(p, 20 * sizeof(char));//(4)将p指针指向的内存空间再扩大20个字节
    cout << "p: " << sizeof(p) << endl;

    strcat(p, ",baby!");//(5)将",baby!"字符复制在p指向空间字符串的后面
    cout << "p: " << p << endl;

    free(p);//(6)释放p指向的空间
    return 0;

}

输出:

p: come on
p: 4
p: come on,baby!

标签:malloc,函数,int,void,内存空间,size
From: https://www.cnblogs.com/imreW/p/17061649.html

相关文章

  • hdu:Holding Bin-Laden Captive(母函数,数学)
    ProblemDescriptionWeallknowthatBin-Ladenisanotoriousterrorist,andhehasdisappearedforalongtime.Butrecently,itisreportedthathehidesin......
  • inet_pton和inet_ntop函数
    Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。ine......
  • Square Coins(母函数)
    ProblemDescriptionPeopleinSilverlandusesquarecoins.Notonlytheyhavesquareshapesbutalsotheirvaluesaresquarenumbers.Coinswithvaluesofall......
  • 5week-4函数作用域
    一.作用域:可见范围,是表示符的可见范围,常量,变量函数天然就是作用域1.块作用域if,for,switch语句中:=定义的变量,都是只能在当前ifforswitch中使用,离开这个范围......
  • 类内函数的override问题-方法
    Question:haveabaseclasswithavirtualfunction:classBase{public:virtualvoidFunction();};voidBase::Function(){cout<<"defaultversion"<<......
  • 解决:无法将“php”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    如果我们已经安装了PHP或者其他集成环境,但是在命令行执行php命令时还是报这个错误  那是因为没有配置环境变量在此电脑上右键,然后看下面这张图  然后在Path变......
  • m基于效用函数的联合资源分配matlab仿真,对比PF,CUBP以及DUBP三种方法
    1.算法描述 表示基站n到用户m是否连接。 1.1C-CUBP   主要涉及到的公式有: 1.2C-DUBP 主要涉及到的公式有: 2.仿真效果预览matlab2022a仿真......
  • 函数的基本使用
    函数简介函数的语法结构函数的定义与调用函数简介name_list=['jason','kevin','oscar','jerry']print(len(name_list))'''突然无法使用len'''count=0fori......
  • 函数的参数
    函数的参数形式参数 在函数定义阶段括号内填写的参数简称'形参'实际参数 在函数调用阶段括号内填写的参数简称'实参'++++++++++++++++++++++++++++++++++++++++++++......
  • C语言基础--函数
    目录一、什么是函数二、函数的创建三、函数的使用四、返回值的使用五、什么是形参和实参六、默认值形参七、函数的递归一、什么是函数编程中的函数是将一些需要复用的代......