动态内存分配
      
        
          
          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返回的指针;
