如何使用malloc函数分配的内存函数用途是什么

如何使用malloc函数分配的内存函数用途是什么,第1张

malloc函数动态分配内存单元的用法

 #include<stdioh>

 

  int main()

  {

   

     int p;

     p=(int ) malloc(1024); 

     p=3;

   

     printf("p address is%p\n",p);

     printf("p is%d\n",p);

  

     free(p);         //这个函数是释放内存malloc函数的内存单元;一定要有。

     printf("%p\n",p);  

 

      return 0;

  }

malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

看来你一定是个初学者。当你需要成千上万的数据时你能像int a=5;int p; p=&a;一样定义那么多数吗?int p; p=(int )malloc(100sizeof(int));实际上可以理解为声明了一个p[100]的int型数组,你怎么用数组就怎么用p的个指针。那么为什么不直接int a[100]这样声明呢?当然可以,这得从两方面说明:1当你知道用多少个数据时,用int a[100]要比用malloc那样方便得多,但很多时候是不知道需要多少数据,要根据需要临时输入数据个数再声明数组——这就有问题了:C是不允许用变量做数组的声明大小的;若尽量往大里安排,那么你事先安排了2000个数据空间,而大部分时候却只使用10个,那不是对很有限的存存空间的无谓浪费吗?2int a[100]这样声明的空间在栈上;栈相对较小,声明太大的数组是放不下的,比如sz[2000][2000]在很多编译器下是不成功的。而用malloc声明的空间在堆上,那里很大很大,可以安排很大的数据量。使用malloc创建的指针p是可以指向别处的,不像你说的不能再p="123"了。但你不能这样做,因为在堆上分配空间是永久性的,必须人工释放,你让它的指针指向别处了,那分配的空间就找不到了(因为空间头指针是唯一记号),可是它还在那里放着释放不了;累积多了就把内在消耗光了——这叫内在泄漏!所以,用了p=(int )malloc(100sizeof(int));,完了必须得用free(p);来释放分配的内存空间。

这个问题首先得从堆栈说起,一个程序一般分为三段:代码段,数据段(静态数据),和堆栈段。堆栈段存储程序中的变量、程序传递的参数等(动态分配的变量存储在堆中,静态分配的存储在栈中)。堆栈的增长方式如下:

程序在运行的时候会预先分配堆栈空间,所以你的问题中不一定修改了不该修改的地方,有可能那里本来就是空的。

再回到malloc这个函数上来,malloc主要负责分配空间,返回该空间的首地址。那为什么申请空间为0,却可以存储7个字符呢?那是因为C语言的指针中并不检查数组的越界问题,不信的话,你可以这样:char ch[5],然后你去读写ch[6](printf或scanf),这样是不会报错的。但是我们在使用的时候,千万别越界使用,因为这样的程序是非常危险的,试想,如果越界使用的地址正好是一个 *** 作系统的地址,那么你一修改,系统就崩了。同时,C语言的这个机制被黑客广泛地应用与缓冲区溢出攻击,所以你非但不能越界使用指针,还得时刻考虑到指针(数组)是否越界,以加强程序的安全性。

希望对你有所帮助。。。

sizeof(struct person)代表一个persion结构所占用内存的大小

此处sizeof(struct person) = 20 + 4 = 24

同时,malloc返回的是所分配内存块的指针,即地址,用于访问这个struct

我一般用C++就说new吧,malloc就格式有些差别

new type[length](initialization);    //length是数组长度,如果动态分配数组填入,不是省略即可

p=new int[7]();    //int p;

size_t SIZE=sizeof (p);    //获取内存大小,sizeof char;恒为1

以上就是关于如何使用malloc函数分配的内存函数用途是什么全部的内容,包括:如何使用malloc函数分配的内存函数用途是什么、malloc函数分配的内存如何使用与函数用途、C语言 malloc()函数 分配内存空间尺寸的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10076788.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存