gpt4 book ai didi

c++ - 创建矩阵时出现段错误

转载 作者:行者123 更新时间:2023-11-30 04:33:27 26 4
gpt4 key购买 nike

我在一些教程中练习 C++,我遇到了一个创建矩阵的教程,我想从中得到更多的东西,我修改了它,我根本不知道矩阵,因为我在学校还没有学过它们,但是下面的这段代码有时有效有时无效。
当它不起作用时,我通常会得到:段错误。
为什么会这样?

在它每次都发生之前但是在我给可变行和成员一个 0 值之后它不再发生了,但是如果我输入 exc
线路:10
成员:9

它给出:

1 1 1 1 1 1 1 1 1

1 2 3 4 5 1 7 8 9
段错误
和采场。
谁能给我解释一下?
谢谢!

 #include <iostream>
#include <iomanip>
using namespace std;

int main()
{
int line=0,member=0;
int i,j,matrice[line][member];

cout << "\nLine: ";
cin >> line;

cout << "Member: ";
cin >> member;

cout << "\nCreated Matrice: \n" << endl;

for (i=0;i<line;i++)
{
for (j=0;j<member;j++)
{
matrice[i][j]=i*j+1;
cout << setw(5) << matrice[i][j];
}
cout << "\n\n";
}
return 0;
}

最佳答案

int line=0,member=0;
int i,j,matrice[line][member];

这一行不应该编译。在标准 C++ 中,

  1. 不允许使用 0 大小的数组
  2. 数组大小必须是constant expressions

看来您的编译器允许将这些作为扩展。在任何情况下,当您稍后输入 linemember 时,您的数组大小都不会改变。输入这些数字后,您应该定义数组。但是数组必须动态分配(更好的是,使用 vectors)

#include <vector>
//...
int line, member;
cin >> line >> member;
vector<vector<int> > matrix(line, vector<int>(member));

或者如果您不想将 vector 用于教育目的,请执行以下操作:

int line, member;
int ** matrix;
cin >> line >> member;
matrix = new int*[line];
for(int i = 0; i < line; ++i)
matrix[i] = new int[member];

不要忘记释放矩阵。

for(int i = 0; i < line; ++i)
delete [] matrix[i];
delete [] matrix;

我建议您阅读 a good C++ book

HTH

关于c++ - 创建矩阵时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6815516/

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