Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运行时检查失败#2-bMatix周围的堆栈已损坏_C++_Gaussian - Fatal编程技术网

C++ 运行时检查失败#2-bMatix周围的堆栈已损坏

C++ 运行时检查失败#2-bMatix周围的堆栈已损坏,c++,gaussian,C++,Gaussian,呼叫树: 人口矩阵(系数、b矩阵、行、列); 解算矩阵(系数、B矩阵、cols+1) void solveMatrix(float aMatrix[][DEFCOLS+1],float bMatrix[DEFCOLS+1],size\t cols){ std::cout发生此问题的原因是传递给solveMatrix()的实际矩阵大小(即cols+1)大于实际数组的大小(coeff或bMatrix) 最简单的调试方法如下: 完全清除函数体。确保不再收到错误消息 还原第一个for()循环。查看这是否

呼叫树: 人口矩阵(系数、b矩阵、行、列); 解算矩阵(系数、B矩阵、cols+1)

void solveMatrix(float aMatrix[][DEFCOLS+1],float bMatrix[DEFCOLS+1],size\t cols){

std::cout发生此问题的原因是传递给solveMatrix()的实际矩阵大小(即cols+1)大于实际数组的大小(coeff或bMatrix)

最简单的调试方法如下:

  • 完全清除函数体。确保不再收到错误消息
  • 还原第一个for()循环。查看这是否导致出现错误
  • 重复此操作,直到找到导致错误的确切函数部分。然后仔细检查并确保没有超过数组限制(即,如果bMatrix为float[16],则没有写入bMatrix[16]、[17]或更多)
  • void solveMatrix(float aMatrix[][DEFCOLS+1],float bMatrix[DEFCOLS+1], size_t cols){
    std::cout << "\nInside solveMatrix...: " << endl;
    size_t N2 = cols;
    
    std::cout << "\N2 is...: " << N2 << endl;
    for(size_t p=0; p<N2; p++){
        //std::cout << "\nInside 1st for loop...: " << endl;
        // find pivot row and swap
        int max = p;
        for(size_t i=p+1; i<N2; i++){
            //std::cout << "\nInside 2nd for loop...: " << endl;
            if ( abs(aMatrix[i][p]) > abs(aMatrix[max][p]) ){
                max = i;
            }
        }
    
        //std::cout << "\nJust b4 all the swapping...: " << endl;
    
        float temp[] = { *aMatrix[p] };
        *aMatrix[p] = *aMatrix[max];
    
        *aMatrix[max] = *temp;
    
        float t = bMatrix[p];
        bMatrix[p] = bMatrix[max];
    
    
        bMatrix[max] = t;
        //std::cout << "\nDone all the swapping...: " << endl;
    
        if ( abs(aMatrix[p][p]) <= MINISCULE) {
            std::cout << "***** Error matrix value too small. Matrix is singular" << endl;
            return;
        }
        // Pivot /in A and b
        for(size_t i=p+1; i<N2; i++){
            float alpha = aMatrix[i][p] / aMatrix[p][p];
    
            bMatrix[i] = alpha * bMatrix[p];
    
            for(size_t j=p; j<N2; j++){
                aMatrix[i][j] -= alpha * aMatrix[p][j];
            }
    
        }
    
        std::cout << "\nAbout to do the back subst..: " << endl;
        // back subst.
         std::vector<float> outMatrix(N2, 0.0);
         int i =0;
    
        for(i=N2-1; i>=0; i--){
            float sum = 0.0;
            int j=0;
            for(j=i+1; j<N2; j++){
                sum += aMatrix[i][j] * outMatrix[j];
            }       
            if (aMatrix[i][i] > 0){
                outMatrix[i] =  ( bMatrix[i] - sum ) / aMatrix[i][i];
            }else {
                outMatrix[i] = 0.0;
            }
        }
    
        int g = 0;
        std::cout << "\nSolution: " << endl;
        for (;g < N2-1; g++) {
            cout << outMatrix[g] << " ";
        }
        cout << endl;
        return;
    }