首页 » 互联网 » 动态内存分配(动态内存分配数组)

动态内存分配(动态内存分配数组)

所谓动态内存分配,就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。动态内存的好处是归纳为8个字:用时分配,不用释放!

动态内存分配数组

内存的三种分配方式:

1. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。

2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。

3. 在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题。 常见内存错误及对策 1. 内存分配未成功,却被使用。 对策:使用内存之前检查是否分配成功。用p!=NULL判断。 2. 内存分配成功,未初始化就被使用。 内存的缺省值没有统一的标准。大部分编译器以0作为初始值,但不完全是。 对策:内存初始化时赋初值。 3. 内存操作越界。 对策:只能是小心了。

动态内存分配(动态内存分配数组)

4. 释放了内存,仍然使用。 (1) 使用显示delete和free的野指针。 对策:释放完内存,将指针置为NULL。 (2) 使用隐式delete和free的野指针。主要是指函数返回指向栈内存的指针或引用。 对策:当然是不要返回就可以了。

5. 未释放内存,导致内存泄露。 用new/malloc开辟了内存,没用delete/free释放. 对策:new和delete的个数一定相同;malloc和free的个数一定相同;new[]和[]delete一定对应。

动态内存分配

数组按要求是不能动态分配内存的,一旦确定数组个数,就固定不变了,包括数组入口地址和大小。

但如果你希望实现动态内存分配的数组,可以使用动态数组,需要使用指针手动开辟内存,并在适当的时候扩大内存空间,或者你可以使用链表数据结构,就可以动态分配数组元素了。


本文最后更新时间:2023-01-06 02:31:21

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注