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