【发布时间】:2019-11-27 05:35:30
【问题描述】:
我想在一个数组中找到一个整数的地址。调试器显示第 8 行有问题。
if (*i==item) {ans=i;};
变量ans 是本地变量且不为空,但发生分段错误。
为什么会这样,我该如何解决?
#include <stdio.h>
int* finder(int *begin, int *end, int item)
{
int *ans=0; int *i=begin;
while (i<end) {
if (*i==item) {ans=i;};
i++;
}
return ans;
}
int main()
{
int arSize, target, i=0;
int arr[10]={};
int *first=&arr[0]; int *last; int *result;
printf("Find element: ");
scanf("&d",&target);
printf("Array size: ");
scanf("&d",&arSize);
printf("Enter array: ");
while (i<arSize){
scanf("&d",&arr[i]);
i++;
}
last=&arr[arSize];
result=finder(first,last,target);
printf("%s %p","Target's address is ",result);
return 0;
}
【问题讨论】:
-
ans不是问题。更有可能是i。arSize的值是多少?请告诉我们确切的输入。 -
这应该是 last=&arr[arSize-1] ....
-
如果
arSize是10或更多呢?如果为真,那么last=&arr[arSize];会导致未定义的行为,因为您将访问数组元素越界。 B/wscanf("&d",&target);-->scanf("%d",&target); -
你为什么用
*ans而不是ans?你用这个声明一个数组。如果你也设置它NULL。您似乎多次这样做了。 -
错字。
scanf()调用使用格式字符串中的&,而不是%。所以变量没有被读取。由于在使用它们的值时它们未初始化,因此代码具有未定义的行为。
标签: c gcc segmentation-fault