避免函数形参为空指针

展示一个函数形参为空指针的隐患:

执行 第32行 代码时,相当于执行 double *pdPoint = pdTemp;,由于pdTemp = NULL,所以 pdPoint = NULL。

在然后 void Pointer(double *pdPoint, int iDim) 函数中对 pdPoint 赋了一块动态内存, 此时 pdPoint != NULL,

但是 pdPoint 和 pdTemp只是赋值关系,所以此时仍然 pdTemp = NULL,最后动态申请的内存没有被释放。

代码:

 1 void Pointer(double *pdPoint, int iDim)
 2 {
 3     int i=0;
 4     pdPoint = new double[iDim];
 5 
 6     memset(pdPoint, 0, sizeof(double)*iDim);
 7 
 8     for (i = 0; i < iDim; i++)
 9     {
10         printf("%.3f\t", pdPoint[i]);
11     }
12     printf("\n");
13 
14     for (i = 0; i < iDim; i++)
15     {
16         pdPoint[i] = i + i*0.1;
17     }
18 
19     for (i = 0; i < iDim; i++)
20     {
21         printf("%.3f\t", pdPoint[i]);
22     }
23     printf("\n");
24 }
25 
26 int main(void)
27 {
28     int iDim = 3;
29     double *pdTemp = NULL;
30 
31     printf("%p\n", pdTemp);
32     Pointer(pdTemp, iDim);
33 
34     printf("%p\n", pdTemp);
35     fflush(stdout);
36 
37     return 0;
38 }

运行结果:

 

posted @ 2024-07-17 16:13  無常  阅读(1)  评论(0编辑  收藏  举报