动态内存简介
2016-03-12 21:08
211 查看
为什么要使用动态内存?
通常当我们声明一个数组时必须要指定他的长度,但是数组的长度只有在程序运行时才知道,这是因为他所需的内存空间取决于输入数据的类型。这种方法虽然简单,但是他的缺点却极大的限制了程序的灵活性和健壮性。这种方式收到了人为限制,一但我们输入的数据元素超过了数组长度,他就无法处理这种情况,所以通常我们价将数组长度设置的非常大。因为数组很大,但是如果我们输入的数据元素很少,这样就极大的浪费内存空间。最重要的是如果我们输入的元素超出了数组长度,有些编译器不会报错,他会把数组存满,剩余的元素不再存取,这样会使程序输出一个错误的值。
所以有时我们要使用动态内存。
“动态内存分配”主要是为了解决那些在运行时才知道所需内存空间 的数组的内存分配。
首先我们来了解malloc,free,calloa,realloc这四个函数:
"malloc",函数原型 void *malloc(size_t size);
"calloc",函数原型void *calloc(size_t num elements,size_telement_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释放内存后,任然访问被释放内存的地址。
通常当我们声明一个数组时必须要指定他的长度,但是数组的长度只有在程序运行时才知道,这是因为他所需的内存空间取决于输入数据的类型。这种方法虽然简单,但是他的缺点却极大的限制了程序的灵活性和健壮性。这种方式收到了人为限制,一但我们输入的数据元素超过了数组长度,他就无法处理这种情况,所以通常我们价将数组长度设置的非常大。因为数组很大,但是如果我们输入的数据元素很少,这样就极大的浪费内存空间。最重要的是如果我们输入的元素超出了数组长度,有些编译器不会报错,他会把数组存满,剩余的元素不再存取,这样会使程序输出一个错误的值。
所以有时我们要使用动态内存。
“动态内存分配”主要是为了解决那些在运行时才知道所需内存空间 的数组的内存分配。
首先我们来了解malloc,free,calloa,realloc这四个函数:
"malloc",函数原型 void *malloc(size_t size);
"calloc",函数原型void *calloc(size_t num elements,size_telement_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释放内存后,任然访问被释放内存的地址。
相关文章推荐
- 4.设计与声明
- Linux正则表达式语法
- Java 显示 使用中的内存
- Django学习笔记(五)—— 表单
- File "/struts-tags" not found
- Java泛型限制Demo3
- Cocos2d-x 3.x版2048游戏开发
- Android的AlertDialog详解 自定义对话框
- 命令行玩转阿里云OSS
- MySQL学习笔记6(触发器)
- CF630K:Indivisibility(容斥)
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- FZU 2110
- js各种距离区分
- java2的三个版本
- C++抽象类
- 如何使用 Java 8 实现观察者模式
- java设计模式--责任链(一)
- 【cocos2dx 3.2】2048
- logstash的kafka插件使用