避免函数形参为空指针
展示一个函数形参为空指针的隐患:
执行 第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 }
运行结果: