C语言 malloc 函数

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.malloc函数简介

malloc 函数主要用于给指针分配内存空间,如果直接操作没有分配内存空间的指针,程序会直接崩溃!

#include <stdlib.h>
/*
*描述:在堆区分配一块指定大小的内存空间,用来存放数据
*
*参数:
*   [IN] size:为需要分配的内存空间的大小,以字节(Byte)计
*
*   返回值:分配成功返回指向该内存的地址,失败则返回 NULL。
*/
void* malloc (size_t size);

注意:由于申请内存空间时可能成功也可能失败,所以需要自行判断是否申请成功,再进行后续操作。

malloc 函数一般和 free 函数配对使用,分配之后的内存需要使用 free 释放,否则会有内存泄漏(就好比:蹲完坑需要擦屁股一样)

图片[1]-C语言 malloc 函数-猿说编程

malloc 函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针,而是返回的指针类型未知。所以在使用 malloc 时通常需要进行强制类型转换,将 void 指针转换成我们希望的类型,例如:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 malloc 函数
//@Time:2021/11/13 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

//为字符串分配内存
char *ptr = (char *)malloc(10);  // 分配10个字节的内存空间,用来存放字符

//为结构体分配内存
struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};
struct Student *pStu = (struct Student *)malloc(sizeof(struct Student));  

二.malloc函数使用

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 malloc 函数
//@Time:2021/11/13 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

#include <stdio.h>  /* printf, scanf, NULL */
#include <stdlib.h>  /* malloc, free, rand, system */

int main ()
{
    int i,n;
    char * buffer;
    printf ("输入字符串的长度:");
    scanf ("%d", &i);
    buffer = (char*)malloc(i+1);  // 字符串最后包含 \0
    if(buffer==NULL) exit(1);  // 判断是否分配成功

    // 随机生成字符串
    for(n=0; n<i; n++)
        buffer[n] = rand()%26+'a';
    buffer[i]='\0';

    printf ("随机生成的字符串为:%s\n",buffer);
    free(buffer);  // 释放内存空间
    system("pause");

    return 0;
}

/*
运行结果:
输入字符串的长度:20
随机生成的字符串为:cgloolmeagtrlfdaswrc
*/

三.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数参数 main(int argc, char *argv[])
  22. C语言 全局变量和局部变量区别
  23. C语言 static
  24. C语言 extern
  25. C/C++ Unicode 和多字节区别
  26. C/C++ wprintf 输出中文乱码
  27. C/C++ char 和 wchar_t 相互转换
  28. C/C++ NaN(Not a Number)
  29. C语言 结构体struct简介(一)
  30. C语言 结构体struct定义和使用(二)
  31. C语言 结构体struct数组(三)
  32. C语言 结构体struct指针(四)
  33. C语言 结构体struct成员函数(五)
  34. C语言 结构体struct嵌套(六)
  35. C语言 结构体struct值传递和址传递(七)
  36. C语言 malloc 函数

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容