指针用法的小问题
- C/C++ code
#include <stdio.h>void max_secondmax ( int a[], int n, int *max, int *second_max );int main(){ int n = 7; int *max=NULL,*second_max=NULL; int a[] = {1, 3, 5, 7, 53, 34, 12}; max_secondmax(a, n, max, second_max); return 0; } void max_secondmax ( int a[], int n, int *max, int *second_max ){ int i, da = a[0]; for(i = 0; i < n; i++){ if(a[i] > da) da = a[i]; } *max = da; /*这里有问题,具体见下文*/ printf("MAX: %d\n",da); }为什么这里面不能 *max = da;这样赋值(出现段错误)?
而是改成 max=&da;就能正常运行了?请问是什么原因?
[解决办法]
- C/C++ code
int *max=NULL,*second_max=NULL;//max没有申请内存,是个野指针
[解决办法]
- C/C++ code
int *max=(int *)malloc(sizeof(int)),*second_max=(int *)malloc(sizeof(int));
[解决办法]
改成上面的就好了
[解决办法]
还有申请完后记得释放内存···