栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈区内存不够用?试试动态内存函数吧

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈区内存不够用?试试动态内存函数吧

目录

malloc

free

calloc

realoc


 malloc
void* malloc (size_t size);

这个函数向内存在堆区中申请一块连续可用的空间,并返回指向这块空间的指针。

如果开辟成功,则返回一个指向开辟好空间的指针。

如果开辟失败,则返回一个 NULL 指针,因此 malloc 的返回值一定要做检查。 

返回值的类型是 void* ,所以 malloc 函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。

 如果参数 size 为 0 ,malloc 的行为是标准是未定义的,取决于编译器。

free
void free (void* ptr);

free 函数用来释放动态开辟的内存。

如果参数 ptr 指向的空间不是动态开辟的,那 free 函数的行为是未定义的。

如果参数 ptr 是 NULL 指针,则函数什么事都不做。 

calloc
void* calloc (size_t num, size_t size);

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为 0 。

与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全 0 。

realoc
void* realloc (void* ptr, size_t size);

 realloc 函数可以对在堆区申请了的内存进行灵活的调整。

ptr 是要调整的内存地址。

size 调整之后新大小。

返回值为调整之后的内存起始位置。

这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。

realloc在调整内存空间的是存在两种情况:

情况 1 :原有空间之后有足够大的空间

当是情况 1 的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。

情况 2 :原有空间之后没有足够大的空间 

当是情况 2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号