AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

malloc函数怎么用,请教一下大神



4


malloc函数具体形象一下



提问于2019-08-20 07:16
Live
10992

同问,我C语言很菜的 –  song666   2019-08-21 03:07

对于采纳的答案在旁边点一下向上的箭头哈 –  yxc   2019-08-21 08:04

@yxc:  老师,点上面的箭头回跳转一个界面 –  Live   2019-08-25 01:40

@yxc:  [object Object] –  Live   2019-08-25 01:41

@Live:  收到!这应该是是个bug,我去排查一下。是在linux上的chrome浏览器嘛 –  yxc   2019-08-26 03:01

@yxc:  老师!现在好了 –  Live   2019-08-29 02:52

@yxc:  退出这个页面,上面的箭头就点亮了 –  Live   2019-08-29 02:52

@Live:  哈哈是的,昨天更新的时候修复了这个bug~ –  yxc   2019-08-29 03:44



3 个问答



4

malloc()函数其实就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。我们这里malloc分配的内存空间在逻辑上连续的,而在物理上可以连续也可以不连续。

回答于2019-08-20 15:03
wuog
77328

谢谢 –  Live   2019-08-25 01:41

例如 ``` int *p=NULL: p=(int *)malloc(sizeof(int *)100); ``` 其中 sizeof(int)*100 代表你要申请的内存空间的大小(可以自己随意设置),(int *)malloc函数的返回值是void*,而p是int*,所以要对返回值进行强制转换.你还可以写一个程序去测试一下他是不是为已经申请了100的空间! –  wuog   2019-08-21 01:33

您能通俗阐述一下括号里怎么填吗?我有点蒙 –  Live   2019-08-21 00:29



3

简单来说,就是要求编译器向操作系统请求一段连续的逻辑内存空间,参数为字节数,返回值为 void 型地址,指向连续空间的首地址。

例如,想要申请能存放 10 个整数的连续内存空间,则可以 int *p = (int *)malloc(10 * sizeof(int))。这里 p 是这段内存空间的首地址。之后可以像访问数组一样访问这段内存空间,例如 p[0] = 2。

malloc 的一个好处是可以申请长度为 n 的内存空间,n 可以是变量,而正常的数组定义则不可以定义长度为 n 的数组。除此之外,返回的指针不是常量指针,可以重新赋值一个新的内存空间,而数组定义出来的数组名则是常量指针。

注意,通过 malloc 分配的内存空间,编译器不会自动回收,如果不再需要这段空间,则要通过 free 函数来释放。

回答于2019-08-21 03:13
wzc1995
692403


2

malloc() 括号里填写要分配多少个字节
这种系统知识性问题可以去百度专门整理的博客 因为即时回答的系统性知识未必就比博客专门整理的知识更详细更系统
提问可以提自己在实践中具体的疑问 比如这个括号里面填写了XXX 为什么和自己想象的不一样等

回答于2019-08-21 01:16
itdef
127344

好的 –  Live   2019-08-21 01:17


我来回答
你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息