一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

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

void* malloc(size_t size);

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

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

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

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

2、

1 int *p;
2 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()函数动态分配空间编程:

复制代码
 1 /***************************************
 2 malloc()函数动态分配空间编程:
 3 (1)定义一个char*型指针变量p
 4 (2)为p分配10个字节的内存空间
 5 (3)复制"come on" 字符串到p指向的内存空间
 6 (4)将p指针指向的内存空间再扩大20个字节
 7 (5)将",baby!"字符复制在p指向空间字符串的后面
 8 (6)释放p指向的空间
 9 ****************************************/
10 #include <iostream>
11 #include <cstdlib>
12 #include <cstring>
13 using namespace std;
14 
15 int main()
16 {
17   char *p;
18   p = (char *)malloc(10*sizeof(char));
19 
20   memset(p,0,10*sizeof(char));
21 
22   strcpy(p,"come on");
23   cout << "p: " << p << endl;
24 
25   p =(char *)realloc(p,20*sizeof(char));
26   cout << "p: " << sizeof(p) << endl;
27 
28   strcat(p,",baby!");
29   cout << "p: " << p << endl;
30 
31   free(p);
32    return 0;
33 }
复制代码

输出:

1 p: come on
2 p: 4
3 p: come on,baby!

 



 

posted on   一杯清酒邀明月  阅读(6143)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示