42 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: malloc
							 | 
						|||
| 
								 | 
							
								localeTitle: 的malloc
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# C中的malloc
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								malloc()是一个库函数,它允许C从堆中动态分配内存。堆是存储某些内容的内存区域。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								malloc()是stdlib.h的一部分,为了能够使用它,你需要使用`#include <stdlib.h>` 。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 使用Malloc
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								malloc()分配所请求大小的内存,并返回指向已分配块开头的指针。要保存此返回的指针,我们必须创建一个变量。指针应与malloc语句中使用的类型相同。  
							 | 
						|||
| 
								 | 
							
								在这里,我们将指向即将出现的一组int
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```C
							 | 
						|||
| 
								 | 
							
								int* arrayPtr; 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								与其他语言不同,C不知道它为内存分配的数据类型;需要告诉它。幸运的是,C有一个名为`sizeof()`的函数,我们可以使用它。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```C
							 | 
						|||
| 
								 | 
							
								arrayPtr = (int *)malloc(10 * sizeof(int)); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								该语句使用malloc为10个整数的数组预留内存。由于大小可以在计算机之间改变,因此使用sizeof()函数计算当前计算机的大小非常重要。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								在程序关闭之前,需要释放在程序执行期间分配的任何内存。为了`free`内存,我们可以使用free()函数
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```C
							 | 
						|||
| 
								 | 
							
								free( arrayPtr ); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								此语句将释放先前分配的内存。 C没有像其他语言一样带有`garbage collector` ,例如Java。因此,在程序关闭后,将继续分配未正确释放的内存。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 在你继续之前......
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 回顾
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   Malloc用于动态内存分配,在您不知道编译期间所需的内存量时非常有用。
							 | 
						|||
| 
								 | 
							
								*   分配内存允许对象存在于当前块的范围之外。
							 | 
						|||
| 
								 | 
							
								*   C传递值而不是引用。使用malloc分配内存,然后将指针传递给另一个函数,比使用函数重新创建结构更有效。
							 |