C++ 浮点异常(核心转储)

C++ 浮点异常(核心转储),c++,c,coredump,C++,C,Coredump,程序:所以我做了一个程序,有两个数字,N和L。N是一个2D数组的大小,L是一个3-16之间的数字。程序构建数组,从中心开始,以逆时针螺旋的方式运行。I是中心的值,在你穿过数组时(在螺旋中)该值将增加1。如果它是素数,则该数字将分配给该点,如果不是,则*将取代其位置 错误:我得到一个“浮点异常”错误,我该如何解决这个问题 代码: void数组_循环(int*Array,int n,int L); int是_素数(int数); int main(int argc,char*argv[]){ 整数**

程序:所以我做了一个程序,有两个数字,N和L。N是一个2D数组的大小,L是一个3-16之间的数字。程序构建数组,从中心开始,以逆时针螺旋的方式运行。I是中心的值,在你穿过数组时(在螺旋中)该值将增加1。如果它是素数,则该数字将分配给该点,如果不是,则*将取代其位置

错误:我得到一个“浮点异常”错误,我该如何解决这个问题

代码:

void数组_循环(int*Array,int n,int L);
int是_素数(int数);
int main(int argc,char*argv[]){
整数**数组;
int n,L;
n=atoi(argv[1]);
L=atoi(argv[2]);
矩阵构建(和数组,n,n);
数组_循环(数组,n,L);
返回0;
}
无效数组_循环(int*数组,int n,int L){
int i,j,k,h;
int lctn,移动;
lctn=n/2+1;
i=lctn;
j=lctn;
移动=1
而(i!=0&&j!=n){
对于(j=lctn;jlctn-move;i--){
如果(L%2==2)数组[i][j]=-1;
else数组[i][j]=Is_素数(L);
L++;
}
移动--;
对于(j=j;j>lctn-move;j--){
如果(L%2==2)数组[i][j]=-1;
else数组[i][j]=Is_素数(L);
L++;
}
移动=移动*-1;
对于(i=i;i
您得到浮点异常是因为
数字%i
,当
i
0
时:

int Is_Prime( int Number ){

  int i ;

  for( i = 0 ; i < Number / 2 ; i++ ){

    if( Number % i != 0 ) return -1 ;

  }

  return Number ;

}
int是素数(int数){
int i;
对于(i=0;i

只需在
i=2
处启动循环。由于
i=1
Number%i
中,它始终等于零,因为Number是一个整数。

浮点异常是由于意外的无穷大或NaN而发生的。 您可以使用gdb跟踪,gdb允许您在C程序运行时查看程序内部的情况。有关更多详细信息:

简而言之,这些命令可能很有用

gcc-g myprog.c

gdb a.out

gdb核心a.out

ddd a.out

int Is_Prime( int Number ){

  int i ;

  for( i = 0 ; i < Number / 2 ; i++ ){

    if( Number % i != 0 ) return -1 ;

  }

  return Number ;

}