gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:30:14 25 4
gpt4 key购买 nike

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

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

在 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() 被调用uninitialized nRowsnCols。这会导致将不正确的值送入 std::vector::resize()

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

input_file >> nRows >> nCols;

关于c++ - 位置未处理的异常:Microsoft C++ 异常:内存位置的 std::length_error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29213704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com