本帖最后由 User_Ghost 于 2020-8-7 13:19 编辑
您是说只要最大值,所以才只传入接收最大值的变量
但是函数在执行的时候,注意一下下边代码的
10和
12行,min_value和max_value是函数的局部变量,也就是说,做完了for循环以后,min_value和max_value已经分别得到最小值和最大值。但是,你的
if语句却是用这两个最值作为判断,那么只要两个最值不为0,if语句都会执行该句的代码。
而您只想要最大值,所以没有传入接受最小值的地址,默认参数为
NULL,也就是空地址。此时注意上边讲的话,您用的是最值局部变量作为判断,只要不为0都会执行,做完for循环以后,两个变量可能都不为0,那执行到 if (min_value)以后,就会做这句的代码块,但是没有传入min_v的地址,所以为空地址,那你说说空地址能用来读写吗?所以程序才会报错。我估计您是打错了代码,if里面应当是对两个指针变量地址的空地址判断,也就是if ( min_v != NULL ) 和 if ( max_v != NULL )
- void get_min_max(int src[], int arr_len, int *max_v = NULL, int *min_v = NULL)
- {
- if (arr_len < 0 || (!max_v && !min_v))
- return;
- int min_value = src[0];
- int max_value = src[0];
- for (int i = 1; i < arr_len; ++i)
- {
- if (min_value > src[i])
- min_value = src[i];
- if (max_value < src[i])
- max_value = src[i];
- }
- if (min_value)
- *min_v = min_value;
- if (max_value)
- *max_v = max_value;
- }
复制代码
关于您说只想要最大值不想要最小值。总而言之,您只想要最大值,没打算要最小值,而函数却帮你算出了最小值,又因为判断标准错误,对空地址读写,才导致程序崩溃的。
另外,您可以尝试在数组里加上0,然后程序也可以正常运行