视觉基本C++错误。运行时检查失败 #2 - 变量周围的堆栈'matrix'已损坏

visual Basic C++ error. Run-Time Check Failure #2 - Stack around the variable 'matrix' was corrupted

本文关键字:周围 变量 堆栈 已损坏 matrix C++ 错误 失败 检查 运行时 视觉      更新时间:2023-10-16

我刚刚开始制作一个矩阵计算器,我很沮丧这么早就遇到了问题。我正在制作一个3x3矩阵计算器,并且在向数组输入值时遇到问题,据我所知,它运行良好,直到"cin Matrix[2][2]";当我得到一个错误"运行时检查失败#2 -围绕变量' Matrix '的堆栈被损坏"。我的猜测是我正在进入数组之外,所以它是未定义的,但我看不到我是如何,感谢任何帮助。

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
   double matrix[2][2];
   for(int i=0;i<=2;i++)
{
    for(int j=0;j<=2;j++)
    {
        cout<<"Enter value: ["<<i+1<<"]["<<j+1<<"] of your 3x3 vector.n";
        cin>>matrix[i][j];
    }
}
   cout<<matrix[1][2];
  cin.get();
  return 0;
}

在c++中(实际上在许多编程语言中)数组的索引从0开始。但是当你指定大小时,你不会从0开始计数。所以应该是-

double matrix[3][3];

如果一个数组有N个元素,那么有效的索引范围是[0, N-1],所以在你的情况下,当N等于2时,有效的索引范围将是[0,1]。

如果你想要一个3 × 3的二维数组那么元素的个数N必须等于3并且有效的下标范围是[0,2]

在C/c++中通常在循环中使用以下条件

for ( int i = 0; i < N; i++ )

在使用范围时不会犯一些错误,尽量使用符号名称来表示数组的大小。例如

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
   const int N = 3;
   double matrix[N][N];
   for ( int i = 0; i < N; i++ )
   {
      for ( int j = 0; j < N; j++ )
      {
         cout< << "Enter value: [" << i+1 << "][" << j+1 << "] of your " 
               << N << 'x' << N << " vector.n";
         cin>>matrix[i][j];
      }
   }
   cout << matrix[1][2];
   cin.get();
   return 0;
}