我尝试打印两个矩阵,比如Matrix A和B.当我只调用矩阵A的一个文本文件时,我的程序没问题。但是当我调用矩阵B的另一个文本文件时,我的程序失败了,留下了一个框,上面写着“newQr.exe中0x00168a07处的未处理异常:0xC00000FD:堆栈溢出。”
这样调用两个文本文件是不对的?以下是我的代码。我正在为QR Householder方法生成算法。但由于我已经在这里失败了,我无法继续我的算法。希望知道这里有什么问题。这是:
test1.in矩阵A:
1.00 -6.00
34.00 -1644.00
803.00 -42258.00
15524.00 -831864.00
285061.00 -15355806.00
5153062.00 -278046852.00
test2.in矩阵B:
-1875.00 17976.00 485714.00 -501810.00
5370.00 409584.00 -973084.00 559740.00
291495.00 9193128.00 -64643018.00 55199850.00
6351060.00 175638624.00 -1430791544.00 1249618200.00
120491745.00 3213894936.00 -27252104806.00 23932788870.00
2200175790.00 58033455312.00 -498213904852.00 438253167540.00
这是我的代码:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#define M 6
#define N 2
#define x 6
#define y 4
#define MAX 100
using namespace std;
int main()
{
double A[MAX][MAX], B[MAX][MAX];
int i, j;
ifstream ifp;
ifp.open("test1.in", ios::in);
cout << "Matrix A" << setw(40) << endl;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
ifp >> A[i][j];
cout << setw(20) << A[i][j];
}
cout << endl;
}
ifp.close();
ifp.open("test2.in", ios::in);
cout << "Matrix B" << setw(40) << endl;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
ifp >> B[i][j];
cout << setw(20) << B[i][j];
}
cout << endl;
}
ifp.close();
cin.get();
}
答案 0 :(得分:0)
我怀疑程序的当前设计存在问题:引发的异常是堆栈溢出异常,这意味着您的堆栈已满。
这是因为你们都在堆栈上声明了矩阵A和B,并为它们保留了一个你甚至不需要的巨大空间(仅限现在可能)。
所以我认为你有两种可能性:要么减少为矩阵分配的空间,例如。通过对A和B进行十分判断:
double A[M][N], B[M][N];
或者您可以在堆上声明A
和B
。为此,我建议您将矩阵的类型从double[][]
更改为std::vector< std::vector<double> >
,因为向量会自动将其值存储在堆上,您无需手动使用new
和{ {1}}。
delete
这个小修改应该足够了:)!