我的C语言.7

我的C语言.7,第1张

我的C语言.7 动态内存函数 malloc

void *malloc(size_ size(要开辟多大,单位为字节));

1.如果开辟成功,返回一个指向开辟好空间的指针,如果开辟失败,返回一个NULL指针,因此malloc的返回值要做检查。

2.malloc的返回类型是void*类型,所以我们要想好开辟什么类型的空间。

3.是在堆上开辟的空间。

free

void free(void *ptr(要释放空间的地址))

1.free函数是专门用来释放或回收动态内存的。

2.如果开辟了动态内存,在使用完这一部分空间,必须要用free函数来释放,否则会出现内存泄漏。

3.如果参数是NULL,则函数什么事也不做。

例:

calloc

void *calloc(size_t num(要开辟多少个元素),size_t size(每一个元素多大));

1.calloc与malloc一样也是动态内存分配的。

2.与malloc不同的是,calloc会将开辟出来的空间进行初始化,将每一个字节初始化为零,而malloc不会初始化。

  realloc

 

void *realloc(void*p(要调整空间的地址),size_t size(需要调整为多少个字节));

1.realloc是用来调整申请内存空间的大小的。

2.返回值是调整之后的内存起始位置。

3.realloc在调整内存空间的时候会出现两种情况:
情况一:原有空间的后面有足够大的空间

 情况二:原有空间的后面没有足够大的空间

当是情况一的时候,要扩展的内存就直接在原有内存之后追加空间,原来空间的地址不变。

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

例:

 常见的动态内存错误 1.对NULL指针的解引用 *** 作

 如果动态内存申请失败,没有判断NULL这个步骤,就会对NULL解引用 *** 作。

 2.对动态开辟空间的越界访问  3.对非动态开辟内存使用free释放

会卡死。 

 4.使用free释放动态内存的一部分

 

5.对同一块动态内存多次释放

 

6. 动态开辟内存忘记释放(内存泄漏)

 

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

原文地址: https://outofmemory.cn/zaji/5718517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存