动态内存简介

来源:互联网 发布:阿扎姆号游艇数据 编辑:程序博客网 时间:2024/05/16 17:58

为什么要使用动态内存?

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

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

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

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

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

spacer.gifwKioL1bkFC7BO8ebAACdqC7pJIE744.png


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

spacer.gifwKiom1bkE8LgoPeMAABuHqpDvQY048.png

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

spacer.gifwKiom1bkE9XDgIyHAAC6u0bsqWA744.png

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

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

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

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


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

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

2、操作内存时越界

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

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

4、malloc与free总是成对出现的

1 0
原创粉丝点击