在C中执行错误访问

在C中执行错误访问,c,C,我是C语言的新手,目前我正在调试我的代码。我在这个特别的错误上走到了死胡同。这给了我一个错误: 线程1:EXC\U错误访问(代码=2,地址=0x7fff5fc00000) 错误出现在krec[0]部分 我还没有弄清楚在C中什么是允许的,在编写C时什么是不允许的。我也希望能有一些建议来提高我的代码的效率。这是我的密码: int k_vector_calculation(int krec[3]) { int Boxx[3], Boxy[3], Boxz [3]; Boxx[0]

我是C语言的新手,目前我正在调试我的代码。我在这个特别的错误上走到了死胡同。这给了我一个错误:

线程1:EXC\U错误访问(代码=2,地址=0x7fff5fc00000)

错误出现在krec[0]部分

我还没有弄清楚在C中什么是允许的,在编写C时什么是不允许的。我也希望能有一些建议来提高我的代码的效率。这是我的密码:

    int k_vector_calculation(int krec[3])

{
  int Boxx[3], Boxy[3], Boxz [3];

  Boxx[0] = lx ;
  Boxx[1] = 0 ;
  Boxx[2] = 0 ;

  Boxy[0] = 0 ;
  Boxy[1] = ly ;
  Boxy[2] = 0 ;

  Boxz[0] = 0 ;
  Boxz[1] = 0 ;
  Boxz[2] = lz ;

  int Productbc[3], Productac[3], Productab[3] ;

  Productbc[0] = Boxy[1] * Boxz[2] ;
  Productbc[1] = 0 ;
  Productbc[2] = 0 ;

  Productac[0] = 0 ;
  Productac[1] = Boxx [0]* Boxz [2] ;
  Productac[2] = 0 ;

  Productab[0] = 0 ;
  Productab[1] = 0 ;
  Productab[2] = Boxx [0]* Boxy [1] ;

  float V0 = 0;

  V0 = lx*ly*lz ;

  int u[3], v[3], w[3] ;

  u[0] = 2*PI/V0*Productbc[0] ;
  u[1] = 2*PI/V0*Productbc[1] ;
  u[2] = 2*PI/V0*Productbc[2] ;

  v[0] = 2*PI/V0*Productac[0] ;
  v[1] = 2*PI/V0*Productac[1] ;
  v[2] = 2*PI/V0*Productac[2] ;

  w[0] = 2*PI/V0*Productab[0] ;
  w[1] = 2*PI/V0*Productab[1] ;
  w[2] = 2*PI/V0*Productab[2] ;

  int l, m, o;
  l = nearbyint(lx) ;
  m = nearbyint(ly) ;
  o = nearbyint(lz) ;

  krec[0] = l*u[0]+m*v[0]+o*w[0] ;
  krec[1] = l*u[1]+m*v[1]+o*w[1] ;
  krec[2] = l*u[2]+m*v[2]+o*w[2] ;
  return k_vector_calculation(&krec[3]);
}
问题就在这里

return k_vector_calculation(&krec[3]);

您已经传递了一个
int
数组
krek[3]
,其中有效位置为
krek[0]
krek[1]
krek[2]
。此外,在上一个
return
语句中反复调用函数时,您还有一个无限递归。您的函数看起来像一个递归函数。真的是这样吗?您已经被反复告知,当变量的定义为
int-krec[3]
时,
&krec[3]
是无效的。此外,如果无效的数组访问没有使您的程序崩溃,您最终将堆栈溢出,因为递归没有基本的大小写/终止条件。那么
lx
ly
lz
它们在哪里声明和初始化呢?@Gopi,可能它们是全局变量或其他什么。OP没有显示他的大部分代码。因此我不能肯定地说是的,如果它们没有初始化,那么它们的值将是不确定的,因此可能会使代码崩溃。是的,它们已初始化。这是一开始的定义