【发布时间】:2018-03-14 08:42:46
【问题描述】:
我有一个代码,它打算使用指针和函数来查找最小值。 问题是,即使我在调试时初始化了指针,它也显示:
抛出异常:读取访问冲突。 min 为 nullptr。
在第 37 行。代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
int tab_min(const int* tab, int size, int *min);
int main()
{
int limit;
int tab[100];
int * ptab = tab;
int min = 2;
int *pmin = &min;
printf("Number of elements: ");
scanf("%d", &limit);
printf("List the elements \n");
for (int i = 0; i < limit; i++)
{
scanf("%d", &*(ptab + i));
}
tab_min(ptab, limit, pmin);
return 0;
}
int tab_min(const int* tab, int size, int *min)
{
if ((tab == NULL) || (size <= 0) || (min = NULL))
{
return 0;
}
else
{
for (int i = 0; i < size; i++)
{
if (*(tab + i) < *min) *min = *(tab + i); //Exception is here
}
return 0;
}
}
有人可以向我解释一下我的推理有什么问题吗?
【问题讨论】:
-
if ((tab == NULL) || (size <= 0) || (min = NULL))应该有一个==。您将min设置为NULL。 -
&*(ptab + i)应该是ptab + i为清楚起见。 -
啊,我没注意,谢谢。
-
在比较的左侧写入常数值
NULL == min是个好主意。这样这样的错字会导致编译时错误消息。 -
@Lundin 不,这是一种实用的方法,可以防止由不可预防的拼写错误引起的错误。过度依赖编译器警告是导致错误的直接途径。注意these warnings won't capture this problem in all context 和这些警告实际上是默认关闭的。
标签: c function pointers initialization null-pointer