首页 > 解决方案 > 函数中的分段错误

问题描述

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

标签: cgccsegmentation-fault

解决方案


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);

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


推荐阅读