C语言 函数中的分段错误



我想在数组中找到整数的地址。调试器显示第 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;
}

scanf()格式有拼写错误:他们使用'&'而不是'%。因此,程序(如发布时(不会读取任何输入。

建议:在尝试运行(或调试(之前,请确保获得CLEAN编译(无警告,无错误(。GCC 使用默认的"cc"标记格式错误。

ff.c:22:11: 警告:格式参数太多 [-wformat-extra-args]

scanf("&d",&target);
^~~~

需要3 个修复。

  • scanf("&d",&target);
  • scanf("&d",&arSize);
  • scanf("&d",&arr[i]);

例如:

printf("Array size: ");
// BAD:    scanf("&d",&arSize);
scanf("%d",&arSize);

使用此修复程序,代码似乎在简单情况下运行良好。

如果 arSize 等于 10,它可能在 finder(( 中的最后一次迭代中失败。

你声明了一个数组 'arr[10]',所以这意味着最后一个元素的索引等于 9,而不是 10 :)

所以,你应该在main((中改变一行:

last=&arr[arSize];

自:

last=&arr[arSize-1];

当然,您应该始终检查 arSize 是否为 <= 10。

相关内容

  • 没有找到相关文章

最新更新