-3
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>


int cauta(const void *x, int n, int dim_el, const void *el)
{
  char *c = (char*) x;
  int i;
  for(i = 0; i < n; i++)
  {
    if(memcmp(c + i * dim_el, el, dim_el) == 0)
      return 1;
  }
  return -1;
}

int main()
{
  int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  int k;
  k = cauta(a, sizeof(a) / sizeof(a[0]), sizeof(a[0]), a[0]);
  printf("%d", k);
  return 0;
}

问题出现在注释行上。如果“el”存在于“x”数组中,该函数返回 1。这是一个简单的,但我不明白为什么它是一个段错误。

此外,这是我尝试逐行调试时的调用堆栈显示。

4

2 回答 2

3

在您的代码中,函数参数是

 int cauta(const void *x,int n,int dim_el,const void *el)

whereel需要 a const void *,而在调用时,

cauta(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),a[0]);

你通过了a[0]这是一个int.

您需要传递一个地址,&a[3]例如 。

也就是说,int main()应该是int main(void)符合标准的。

于 2016-01-23T15:47:32.503 回答
0

您将int ie a[0]传递给会导致错误的方法cautaconst void *

于 2016-01-23T15:48:13.550 回答