首页 > 解决方案 > 我的程序在完成所有执行之前就中断了

问题描述

我正在尝试使用Vectors. 虽然在打印我输入的矩阵并在不执行任何循环和数学运算的情况下中断后运行程序未执行。为什么我的程序在第二个 for 循环后结束?我哪里错了?

//  Multiplication of Matrix by its Transpose
#include<bits/stdc++.h>
using namespace std;
 
 int main()
 {
 int row,col;
 cout<<"ENTER ROWS:";
 cin>>row;
 cout<<"ENTER COLS:";
 cin>>col;

 vector<vector<int>> vec(row, vector<int> (row,col));
  vector<vector<int>>  tran(row, vector<int> (row,col));

 vector<vector<int>>  ans(row, vector<int> (row,col));

    for(int i=0;i<row;i++)
    {
     for(int j=0;j<col;j++)
     {
          int t;
       cin>>t;
         vec[i][j]=t;
     }
       
    } 
    cout<<"\n"<<"Orignal Matrix:"<<endl;
    for(int i=0;i<row;i++)
    {
       for(int j=0;j<col;j++)
       {
          cout<<vec[i][j]<<" ";
       }
       cout<<"\n";
    }

  for(int i=0;i<row;i++) // transpose
  {
      for(int j=0;j<col;j++)
      {
          tran[i][j]=vec[j][i];
      }
  }


  
cout<<"\n\nTranspose Matrix: \n\n";

  for(int i=0;i<col;i++)
  {
      for(int j=0;j<row;j++)
      {
        cout<<tran[i][j]<<" ";
      }
      cout<<endl;
     
  }

 for(int i=0;i<row;i++) // multiplication
 {
     for(int j=0;j<col;j++)
     {
         ans[i][0]=vec[i][0]*tran[0][j];
         ans[0][j]=vec[0][j]*tran[i][0];


     }
 }
 cout<<"\n\nMultiplied Matrix: \n\n";

  for(int i=0;i<row;i++)
 {
     for(int j=0;j<col;j++)
     {
         cout<<ans[i][j]<<" ";
     }
     cout<<endl;
 }



 } 

我得到的输出:

ENTER ROWS:3
ENTER COLS:5
2 4 5 5 6 
4 6 7 9 0
1 2 3 5 8

Orignal Matrix:
2 4 5 5 6
4 6 7 9 0
1 2 3 5 8 
 

预期输出:

ENTER ROWS:3
ENTER COLS:5
2 4 5 5 6 
4 6 7 9 0
1 2 3 5 8

Orignal Matrix:
2 4 5 5 6
4 6 7 9 0
1 2 3 5 8 

Transpose Matrix:
2 4 1
4 6 2
5 7 3
6 9 5
6 0 8

Multiplied Matrix: 
106 112 98
112 182 82
98  82  103

标签: c++c++11

解决方案


好的,首先...有一些方法可以找出程序崩溃的位置。至少,您可以添加更多 cout 语句,它会告诉您。

但这很明显:

  vector<vector<int>> vec(row, vector<int> (row,col));
  vector<vector<int>>  tran(row, vector<int> (row,col));

  for(int i=0;i<row;i++) // transpose
  {
      for(int j=0;j<col;j++)
      {
          tran[i][j]=vec[j][i];
      }
  }

您声明了两者vec并且tran完全相同,但是您确实需要将行数与 tran 列数翻转。

考虑正在发生的事情。i从 0 到 2。没关系。j从 0 到 4。然后执行 tran[3][0] = vec[0][3]。

但是 tran[3] 超出了数组的末尾,你会得到一个越界错误。


推荐阅读