码迷,mamicode.com
首页 > 其他好文 > 详细

动态内存简介

时间:2016-03-13 06:43:45      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:malloc   realloc   calloc   free的使用   

为什么要使用动态内存?

通常当我们声明一个数组时必须要指定他的长度,但是数组的长度只有在程序运行时才知道,这是因为他所需的内存空间取决于输入数据的类型。这种方法虽然简单,但是他的缺点却极大的限制了程序的灵活性和健壮性。这种方式收到了人为限制,一但我们输入的数据元素超过了数组长度,他就无法处理这种情况,所以通常我们价将数组长度设置的非常大。因为数组很大,但是如果我们输入的数据元素很少,这样就极大的浪费内存空间。最重要的是如果 我们输入的元素超出了数组长度,有些编译器不会报错,他会把数组存满,剩余的元素不再存取,这样会使程序输出一个错误的值。

所以有时我们要使用动态内存。

“动态内存分配”主要是为了解决那些在运行时才知道所需内存空间  的数组的内存分配。

首先我们来了解malloc,free,calloa,realloc这四个函数:

"malloc",函数原型  void *malloc(size_t size);

技术分享技术分享


"calloc",函数原型 void *calloc(size_t num elements,size_t element_size )

技术分享技术分享

"realloc" 函数原型  void *realloc(void *ptr,size_t new_size)

技术分享技术分享

"free" 函数原型  free(p);

free的参数必须是NULL,或者是malloc,calloc,realloc的返回值。

他的作用是释放内存(用完内存后必须释放,不然会发生内存泄漏,内存越用越少)。当然,当你释放完后p依然指向内存的起始位置,所以还要手动将地址p赋为空,即:p=NULL。

使用free时一定要确保不再访问被释放内存的地址。


动态内存使用的常见错误:

1、没有检查内存是否匹配成功

2、操作内存时越界

例如:申请一个数组arr[3],如果数组引用时下标小于0或者下标大于2会发生越界。

3、使用free释放内存后,任然访问被释放内存的地址。


本文出自 “11132019” 博客,转载请与作者联系!

动态内存简介

标签:malloc   realloc   calloc   free的使用   

原文地址:http://11142019.blog.51cto.com/11132019/1750347

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!