位置未处理的异常:Microsoft C++ 异常:std::length_error 在内存位置

Unhandled exception at location :Microsoft C++ exception: std::length_error at memory location

在浏览了之前就此主题提出的问题后,我并没有真正理解任何答案。我的助教试图帮助我解决这个问题大约一个小时,但什么也想不通。

首先,这是程序编译时出错的地方

在xthrow.cpp

_CRTIMP2_PURE __declspec(noreturn) void __CLRCALL_PURE_OR_CDECL
_Xlength_error(_In_z_ const char * _Message)
{ // report a length_error
_THROW_NCEE(length_error, _Message);
}

在dbgmalloc.c

void *res = _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);

头文件

#include <iostream>
#include <fstream>
#include <cmath> 
#include <vector>
#include <string>
#include <iomanip>

using namespace std;

class matrix
{   
private:
    vector <vector <double> > mat;      // Stores 2D matrices
    int nRows;                      // Stores number of rows
    int nCols;                      // Stores number of columns
    void resize(int nRows, int nCols);          // Resizes mat      

public:
    void readfile(ifstream&);           // Reads values for nRows and nCols
    matrix(ifstream&);                  // Calls readfile function
    void print();                       // Prints the current values of mat
    int getrows();                      // Returns the value of nRows
    int getcols();                      // Returns the value of nColumns
    vector<vector<double>> getmat();        // Returns a 2D vector
    void add(matrix);                   // Adds 2 matrices and stores in mat 
    // Multiplies 2 matrices and stores in mat
    vector<vector<double>> multiply(matrix);
};

函数文件

#include "matrix.h"

using namespace std;

void matrix::resize(int nRows, int nCols)
{
    mat.resize(nRows);
    for(int i=0; i<nRows; i++)
    {
        mat[i].resize(nCols);
    }
}

void matrix::readfile(ifstream& input_file)
{

input_file >> nRows >> nCols;

resize(nRows, nCols);

for(int i=0; i<nRows; i++)
{
    for(int j=0; j<nCols; j++)
    {
        input_file >> mat[i][j];
    }
}
}

matrix::matrix(ifstream& input_file)
{
    readfile(input_file);
}

void matrix::print()
{
for(int i=0; i<nRows; i++)
{
    for(int j=0; j<nCols; j++)
    {
        cout << mat[i][j] << '\t';
    }
cout << endl;
}

}

主要

#include "matrix.h"

using namespace std;

int main()
{

ifstream input_file;
string filename;
//int nRows;
//int nCols;

cout << "Enter filename: " << endl;
cin >> filename;
cout << '\n';

input_file.open(filename.c_str());
if (input_file.fail())
{
    cout << "file didn't open.";
    system("pause");
}
else
{
//input_file >> nRows >> nCols;
//cout << "Matrix 1:" << endl << "Rows = " << getrows() << endl;
//cout << "Columns = " << nCols << '\n' << endl;

matrix a(input_file);
a.print();
system("pause");
}
return 0;
}

抱歉格式有点乱。很难将代码复制并粘贴到此...感谢您的帮助!

void matrix::readfile(ifstream& input_file)
{
resize(nRows, nCols);
for(int i=0; i<nRows; i++)
{
    for(int j=0; j<nCols; j++)
    {
        input_file >> mat[i][j];
    }
}
}

matrix::matrix(ifstream& input_file)
{
    readfile(input_file);
}

构造matrix时,resize()被调用未初始化nRowsnCols。这会导致输入 std::vector::resize().

的值不正确

根据您在评论中的描述,您应该在 matrix::readfile() 的开头添加以下行:

input_file >> nRows >> nCols;