void * malloc(_Size);
malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针。
void free(void *p);
free 负责在堆中释放malloc分配的内存。参数p为malloc返回对中的内存地址。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 void print_array(int *p,int n) 6 { 7 int i; 8 for (i = 0; i < n; i++){ 9 printf("p[%d] = %d \n" ,i,p[i]); 10 } 11 } 12 13 int main(){ 14 int *p = (int *)malloc(sizeof(int)* 10); 15 memset(p, 0, sizeof(int)* 10); 16 int i; 17 for ( i = 0; i < 10; i++) 18 { 19 p[i] = i; 20 21 } 22 print_array(p, 10); 23 24 return 0; 25 } 26
1 //正确示例 2 3 void getHeap(int **p){ 4 *p = malloc(sizeof(int)* 10); 5 } 6 7 int main(){ 8 int *p = NULL; 9 printf("p = %p\n", &p); 10 getHeap(&p); 11 printf("p = %d\n", p); 12 p[0] = 1; 13 p[1] = 2; 14 printf("p[0] =%d ,p[1] =%d ", p[0], p[1]); 15 free(p); 16 return 0; 17 }
1 //错误示例 2 3 void getHeap(int *p) 4 { 5 p = malloc(sizeof(int)* 10); 6 //getheap 执行完以后,p就消失了,导致他指向的地址编号也随之消失。 7 } 8 int main(){ 9 int *p = NULL; 10 getHeap(p); 11 p[0] = 1; 12 p[1] = 2; 13 printf("p[0] =%d ,p[1] =%d ", p[0], p[1]); 14 free(p); 15 return 0; 16 17 }