参数是指针,传递指针变量,最后函数总分配的内存丢了

 1 void allcMem(int *a, int n){
 2     a = (int*)malloc(n*sizeof(int));
 3     for (int i = 0; i < n; i++){
 4         a[i] = 0;
 5     }//end for
 6 }//end fucntion allcMem
 7 
 8 int main(int argc, char** argv){
 9     int *pi = NULL;
10     int arr[] = { 1, 1, 1, 1, 1, 1, 1 };
11     pi = arr;
12     allcMem(pi,5);
13     for (int i = 0; i < 7; i++){
14         printf("%d  ",pi[i]);
15     }//end for
16     printf("\n");
17     system("pause");
18     return 0;
19 }//end main

上面的代码最后的结果是 输出七个1,而不是5个0

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 10
 4 
 5 void allcMem(int **a, int n){
 6     *a = (int*)malloc(n*sizeof(int));
 7     for (int i = 0; i < n; i++){
 8         (*a)[i] = 0;
 9     }//end for
10 }//end fucntion allcMem
11 
12 
13 
14 int main(int argc, char** argv){
15     int *pi = NULL;
16     int arr[] = { 1, 1, 1, 1, 1, 1, 1 };
17     pi = arr;
18     allcMem(&pi,5);
19     for (int i = 0; i < 5; i++){
20         printf("%d  ",pi[i]);
21     }//end for
22     printf("\n");
23     system("pause");
24     return 0;
25 }//end main

这样才是正确的代码

原文地址:https://www.cnblogs.com/cplinux/p/5376606.html