C语言动态内存开辟

网友投稿 853 2022-05-30

C语言中内存开辟

可以从文档里看出,该函数参数是一个要开辟的字节数。

具体怎么操作呢:

C语言之动态内存开辟

它说的是什么意思呢? 简单地说就是,该函数可以将内存块移动到新的位置,在这种情况下,将返回新的位置。即使块被移动,内存块的内容也会保留到新旧大小中较小的大小。如果新大小较大,则新分配的部分的值不确定。在ptr为空的情况下,该函数的行为与malloc完全相同,它分配一个新的大小字节块,并返回一个NULL。

ptr:指向先前用malloc、calloc或realloc分配的内存块的指针,以便重新分配。 size: 指内存块的新大小(以字节为单位)。如果它是0, ptr指向一个现有的内存块,那么ptr指向的内存块将被回收,并返回一个空指针。

该函数的功能是: 为num元素数组分配一个内存块,每个元素的大小都是字节长,并将其所有的 位 初始化为0。

三种内存开辟具体实例

三种内存开辟方式比较和总结

malloc 、realloc、calloc三个函数都是用来动态开辟内存的,并且开辟的都是一段连续的内存。

malloc和realloc:realloc主要是用于修改一个原先已经分配好的内存块的大小;而malloc主要是用来开辟一个以字节为单位的新的内存块。

如果realloc是用来扩大或者缩小一个内存块: ●扩大内存块:那么这块内存原来的内容依然保留,新增的内存添加到原内存快的后面,新增加的空间并没有进行初始化,只是增加了大小; ●缩小内存:该内存块尾部部分的内存会被拿掉,剩余部分依旧保留; ●如果该内存块无法改变大小, realloc 就会重新分配一块正确的内存,并把原来内存的内容复制到新的内存块上。因此,在使用realloc之后,就不能再使用指向旧空间的指针,而是使用realloc返回的新指针

calloc和malloc 主要是前者在返回指向内存的指针之前把它初始化为 0。并且calloc参数包括所需元素的数量和每个元素的字节数。根据这些值来计算总共需要分配多少内存。

使用完之后必须要用 free 释放空间,否则会造成内存泄漏。

内存泄漏(非常重要)

当动态分配的内存不再需要使用时,这块内存就应该被释放,这样可以被重新分配使用。分配但不在使用完成之后释放内存会造成内存泄漏。 内存泄漏最终将会一点一点的榨干内存,最后只能重启。万一实在一个大型的服务器,那后果难以想象,对于一个程序猿来说大概就差不多可以收拾东西滚蛋了,啊哈哈哈哈。

常见的动态内存错误

对NULL的解引用

对分配的内存进行操作时越过边界

释放非动态分配的内存

试图释放一块动态分配的内存的一部分以及一块动态内存被释放之后继续使用。

malloc 和 free没有配套使用

对动态开辟的内存重复释放

本文转载自异步社区。

其他

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序:获取用户信息(昵称和头像)
下一篇:ABAP下载的病毒扫描Virus Scan 配置方法
相关文章