数组大小分配问题及相关问题
来源:互联网 发布:linux查看发行版 编辑:程序博客网 时间:2024/05/16 19:27
在使用数组的时候,总有一个问题始终困扰着我们:到底给数组分配多大的内存空间?
当给数组分配内存空间小时,会引起下标越界的情况(编译器是不会发现问题的),甚至导致严重后果。当分配的内存大时,会浪费内存空间。这是由于静态分配数组内存所引起的问题,静态分配内存是在编译器完成数组空间内存的分配,这种分配方式要求程序在编译之前就应该确定数组的分配空间。
有什么方法可以解决这种问题的出现,那就是使用动态内存分配。动态内存分配就是在程序编译的过程中不需要明确数组的内存空间,当在程序执行过程中动态的分配数组空间,由系统根据程序的需要在运行期进行分配内存。
动态内存分配相对于静态内存分配的特点:
(1)动态内存分配不需要在编译之前预先分配存储空间。
(2)分配的空间可以根据程序的需要进行扩大或是缩小。
动态分配内存具体的实现方法(两种)
在C语言的实现的方法:
(1)动态内存分配的实现及管理
要实现动态内存分配需要分配动态空间函数malloc函数。该函数的原型为:
void* malloc(unsigned int size);
其作用是在堆内存中分配一个长度为size的连续空间。返回值是一个指向所分配的连续存储域的起止地址的指针。分配一个堆内存是有风险的,如果堆内存空间不足时,该函数就会返回一个NULL指针,所以在调用该函数后应该检测返回值是否为NULL并执行相应的操作。
如: char* str = malloc(4*sizeof(char));
if(str != NULL) .....;
(2)动态内存的释放
由于堆内存的使用空间是有限的,当使用该指针结束后,就应该释放该空间的内存,以便其他的变量使用它。这就需要free函数。其函数原型是:
void free(void* p);
作用是释放指针p所指向的内存空间。指针p必须是指向malloc分配的空间,如果不是堆空间,那么会造成可怕的后果。
列如:
char* p1,*p2;
p1 = malloc(3*sizeof(char));
p2 = p1;
free(p2);
以上操作是正确的。
(3)野指针
由于动态内存分配的堆内存已经释放,该内存内的原变量已将不存在,但是该指针仍然指向这一堆内存的地址,由于不知道该堆内存不知道会存储什么内存,因此该指针被称为“野指针”。
消除野指针的方法是把该指针置为NULL。
p2 = NULL;
在C++中的实现方法:
- 数组大小分配问题及相关问题
- C++动态内存分配及动态数组的相关问题
- 一个数组分配大小的问题
- struct大小相关问题
- DLL内存分配相关问题
- 线段树分配空间大小问题
- 数组相关问题
- 数组相关问题
- 数组相关问题
- iOS数组相关问题
- 求数组大小的问题
- C++ 定义数组大小问题
- 二维字符数组与二维整型数组在内存中的分配及指针的问题
- 汉字编码及相关问题
- 相关问题及解决办法
- SQLMode及相关问题
- 堆及相关问题
- MSP430RAM内数组分配问题,实验结果
- 漫威超级英雄大全(一)
- scu 2057 树状数组 单点更新区间求和问题
- mysql read committed
- lightswitch datagrid 动态添加复选框的功能。
- Android开发之SurfaceView详解
- 数组大小分配问题及相关问题
- 記号の読み方
- 设置QT 无框架,,,无最小化,最大化
- 黑马程序员-集合(2)
- UVa 11800 - Determine the Shape
- git 相关
- Android 坐标系统
- java DAO模式 求大神详解 不胜感激
- 常用linux发行版使用USTC软件源的方法