renchenglong-real

 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 }

 

分类:

技术点:

相关文章: