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

时间:2015-03-23 15:09:06

标签: c++ class header-files

在查看之前就此主题提出的问题后,我无法理解任何答案。我的电信管理局试图帮我解决这个问题大约一个小时,无法解决任何问题。

首先,这是程序编译时错误发生的地方

在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;
}

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

1 个答案:

答案 0 :(得分:2)

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()nRows调用nCols。这会导致输入std::vector::resize()的值不正确。

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

input_file >> nRows >> nCols;