位置未处理的异常: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()
被调用未初始化nRows
和nCols
。这会导致输入 std::vector::resize()
.
的值不正确
根据您在评论中的描述,您应该在 matrix::readfile()
的开头添加以下行:
input_file >> nRows >> nCols;
在浏览了之前就此主题提出的问题后,我并没有真正理解任何答案。我的助教试图帮助我解决这个问题大约一个小时,但什么也想不通。
首先,这是程序编译时出错的地方
在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()
被调用未初始化nRows
和nCols
。这会导致输入 std::vector::resize()
.
根据您在评论中的描述,您应该在 matrix::readfile()
的开头添加以下行:
input_file >> nRows >> nCols;