终止进程(错误代码-1073741571)

时间:2017-05-28 15:01:07

标签: c++ codeblocks eigen

所以我正在研究这个我要编写代码的模拟。 最初,我曾经得到一个错误代码255(0xff),我认为可能是因为在我的代码块中添加了Eigen。但是,一旦我将我的Eigen头移动到代码块的include文件夹,我现在得到一个新的错误,消息是: -

  

处理终止,状态为-1073741571(0分钟,2秒)

我查了一下这个错误,它说它是在一个bug导致堆栈溢出时出现的。我运行我的调试器并收到消息: -

  

注册新类型:wxString

     

已注册的新类型:STL字符串

     

注册新类型:STL Vector

     

设置断点调试器名称和版本:GNU gdb(GDB)7.6.1

     

子进程PID:13284

     

编程接收信号SIGSEGV,分段故障。

所以我知道我的一个功能有错误。 以下是我的代码(它非常大)

#include <iostream>
#include <fstream>
#include <conio.h>
#include <random>
#include<math.h>
#include <Eigen/Dense>
#include<time.h>
#define pi atan(1) * 4       
using namespace std;
using namespace Eigen;
int Poisson(int N)   
{
    int n=1;
    float x,y,k=0;
    do
    {
        x=(float)rand()/RAND_MAX;
        y = -log(x);
        k=k+y;
        n=n+1;     //n increases for each random number generated
    }
    while(k<N);  
    return n;
}
int sumrow(MatrixXd A,int row, int col_len)
{
    int sum=0;
    for(int i=0;i<col_len;i++)
    {
        sum=sum+A(row,i);
    }
    return sum;
}
void generate_D(MatrixXd A, int dim, MatrixXd D)
{
    for(int x=0;x<dim;x++)
    {
        for(int y=0;y<dim;y++)
        {
            if(x==y)
            {
                D(x,y)=1/sqrt(sumrow(A,x,y));
            }
            else
                { D(x,y) =0;  }
        }
    }
}
void sqmatrix_multiply(MatrixXd A,MatrixXd B,int dim, MatrixXd C)
{
    for(int i=0;i<dim;i++)
    {
        for(int j=0;j<dim;j++)
        {
            for(int k=0;k<dim;k++)
            {
                C(i,j) = C(i,j) + (A(i,k)*B(k,j));
            }
        }
    }
}
void generate_B(MatrixXd A, int dim, MatrixXd B)
{
    MatrixXd D;
    MatrixXd C, inter1, inter2;
    generate_D(A,dim,D);
    sqmatrix_multiply(A,D,dim,inter1);
    sqmatrix_multiply(D,C,dim,inter2);
    for(int i=0;i<dim;i++)
    {
        for(int j=0;j<dim;j++)
        {
            if(i==j)
            {
                    B(i,j) = 1 - inter2(i,j);
            }
            else
            {
                B(i,j) = 0 - inter2(i,j);
            }

        }
    }
}
int main()
{
    srand(time(NULL));
    double X,Y,x,y,a,b,L[5000][5000],M[5000][5000];
    MatrixXd A, B;
    for(int i=0; i<5000;i++)
    {   L[i][i]=0;  M[i][i]=0;   }
    int N, I;
    cout<<"Enter your number and iterations";
    cin>>N>>I;
    int P[5000];
    for(int i=0; i<I; i++)
    {
        P[i]=Poisson(N);
    }
    for(int k=0; k<I; k++)
    {
        for (int j=0;j<P[k];j++)
        {
          A:
          X=(float)rand()/RAND_MAX;    
          Y=(float)rand()/RAND_MAX;
          x=sqrt(X);    
          y = 2*(pi)*Y;        
          a=x*cos(y);        
          b=x*sin(y);
          if((a*a)+(b*b)>1)     
          {
              goto A;
          }
          L[k][j] = a; M[k][j] = b;
        }
    }
    for(int a=0;a<I;a++)
    {
        for(int a1=0;a1<P[a];a1++)
        {
            for(int a2=0;a2<P[a];a2++)
            {
                if(a1==a2)
                {
                    A(a1,a2)=0;
                }
                else
                {
                    if(((L[a][a1]-L[a][a2])*(L[a][a1]-L[a][a2]))+((M[a][a1]-M[a][a2])*M[a][a1]-M[a][a2]) < 1)  //distance formula
                    {
                        A(a1,a2)=1;
                    }
                    else
                    {
                        A(a1,a2)=0;
                    }
                }
            }
        }
        generate_B(A,P[a],B);
        EigenSolver<MatrixXd> b(B,false);
        cout<<a+1<<" Eigen values are: \n "<<b.eigenvalues()<<"\n";
    }
    return 0;
}

我在不同的程序中分别尝试了一些功能。问题与Eigen标题无关,因为sumrow()工作得非常好。 但是,Poisson()函数给了我同样的错误(-1073741571)。我尝试用简单的方法替换do-while,但它没有用。

早些时候,当我单独使用Poisson()时,它曾经工作正常。但现在,它也没有独立运作。

很抱歉这个长期的问题,但我已经使用了一个多星期了,似乎无法弄明白。如果你能告诉我我的代码可能有什么问题,我将非常感激。 非常感谢提前!

0 个答案:

没有答案