更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C语言当中malloc的用法和意义

  • 发布:C++培训
  • 来源:资料库
  • 时间:2020-02-25 15:36

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

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

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

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

5、malloc()函数动态分配空间编程: /***************************************

malloc()函数动态分配空间编程:

(1)定义一个char*型指针变量p

(2)为p分配10个字节的内存空间

(3)复制"come on" 字符串到p指向的内存空间

(4)将p指针指向的内存空间再扩大20个字节

(5)将",baby!"字符复制在p指向空间字符串的后面

(6)释放p指向的空间

****************************************/

#include <iostream>

#include <cstdlib>

#include <cstring>

using namespace std;

int main()

{

char *p;

p = (char *)malloc(10*sizeof(char));memset(p,0,10*sizeof(char));strcpy(p,"come on");

cout << "p: " << p << endl;p =(char *)realloc(p,20*sizeof(char));

cout << "p: " << sizeof(p) << endl;strcat(p,",baby!");

cout << "p: " << p << endl;free(p);

return 0;}输出:p: come on

p: 4

p: come on,baby!

malloc注意事项

1 malloc后的内存除了等到free来释放,还可以等到程序运行结束时自动释放

2 程序运行过程中,如果一直malloc内存而不释放会导致这部分内存不能被再次使用,即内存泄露。这样以来,应用程序会逐渐用光所有可用的内存,最终导致应用程序因内存不足而崩溃停止。

3 所以一个好的习惯是,malloc后一定要记得free之。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:关于C语言的关键词整理与分析
下一篇:C++基础入门学什么?后期开发学什么?

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省