动态内存分配
2023-12-18 21:57:37
# 技术
C 语言的动态内存分配
C语言使用malloc
和free
两个库函数完成动态内存的分配和释放,头文件为stdlib.h
。其函数原型为:
1 | void * malloc(size_t_ size); |
使用实例:
1 |
|
需要注意的地方(C语言内存分配的不足之处):
malloc
函数的参数是要分配的字节数目,这个需要我们自己来计算。比如,上面的实例中,我们先使用sizeof
函数计算了char
类型的内存大小,然后分配了20个char
类型内存大小;malloc
函数的返回值是无类型指针void *
,需要我们在程序中强制将其转为指定的类型。所以在上面的实例中,我们使用(char *)
将其转为char
类型的指针变量;- 特别需要注意的是
free
函数只是释放了malloc
所申请的内存,但并没有改变指针的值,因此,在释放内存后应该将指针指向NULL
,否则该指针将指向一个无法控制的内存区域,成为野指针;
C++动态内存分配
为了弥补C语言动态内存分配的缺点,C++提供了新的运算符new
和delete
来完成动态内存的分配和释放。
使用运算符new
和delete
的优点为:
new
的参数为待分配单元的数目,它自动计算要分配的变量类型的大小;- 它自动返回正确的指针类型,不必对返回的指针进行类型转换;
- 可以用
new
将分配的存储空间进行初始化;
使用方法为:
1 | 1. 指针变量名 = new 指针基类型名(指针基类型表达式); |
注意事项如下:
- 使用
new
申请的存储空间是没有名字的,只能通过指针间接访问它们; delete
的操作数必须是一个new
返回的指针;