【问题标题】:Really basic piece of code returns no error but does not work? (exits with code -1073741571)真正的基本代码没有返回错误但不起作用? (退出代码 -1073741571)
【发布时间】:2021-04-01 11:59:38
【问题描述】:

正如标题所说 - 我有一段非常基本的代码,它应该读取两个数字,然后是一个 2D 浮点数组。我没有收到任何错误,但是当我运行我的程序时,它崩溃并显示代码 -1073741571,我不明白为什么。

代码如下:

#include <iostream>
#include <iomanip>
#include <algorithm>

using namespace std;

void citireNrEcuatiiNecunoscuteSiMatriceaExtinsa(int& a, int& b, float c[][1001])
{
    cout << "\nIntroduceti numarul de ecuatii: ";
    cin >> a;
    cout << "\nIntroduceti numarul de necunoscute: ";
    cin >> b;
    int i = a;
    int j = b + 1;
    cout << "\nIntroduceti elementele matricei extinse: ";
    for (int contorLinie = 0; contorLinie < i; contorLinie++)
    {
        for (int contorColoana = 0; contorColoana < j; contorColoana++)
        {
            cin >> c[contorLinie][contorColoana];
        }
    }
}

int main()
{
    int numarEcuatii, numarNecunoscute;
    cout << setprecision(3);
    float mat[1001][1001];
    citireNrEcuatiiNecunoscuteSiMatriceaExtinsa(numarEcuatii, numarNecunoscute, mat);
}

【问题讨论】:

  • float mat[1001][1001] 非常庞大。这肯定比你在堆栈上的空间要多。
  • 实际上,它并没有我想象的那么大。使用 4 字节浮点数,即 4mb,所以能否做到这一点取决于您设置的堆栈大小。
  • @Carcigenicate:他在 Windows 上编写了代码。除非他更改,否则主线程的堆栈大小为 1mb。 (它在项目文件中,所以你不会在这里看到它。)
  • 这是this 的副本。但是,该问题已关闭,与其他不匹配的问题重复。
  • @Carcigenicate 这就是问题所在。将 [1001] 更改为 [101] 有效。谢谢:)

标签: c++


【解决方案1】:

你得到一个堆栈溢出。您应该使用new [] operator 在动态内存中分配数组,或者只使用std::vector(这会更简单,因为您不需要使用 for 循环分配每个内部数组)。

【讨论】:

    【解决方案2】:

    如果分配大量内存,请考虑在堆上这样做。这样做是为您分配内存的最安全的赌注,因为您稍后会分配内存以避免任何内存泄漏。

    float **mat = new float[1001][1001];
    

    【讨论】:

      【解决方案3】:

      正如@Jarivs 提到的分配二维内存的方法,但它并不像他提到的那么简单。为此,您必须这样做。

      要在堆上声明二维数组,您可以这样做:

          float **mat = new float*[1001];
          for(int i = 0; i < 10001; ++i){
              mat[i] = new float[1001];
          }
      
      

      但不要忘记删除,你分配给多维数组的内存可以这样释放。

          for(int i = 0; i < 10001; ++i ){
              delete [] mat[i];
          }
      

      【讨论】:

        猜你喜欢
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        • 2021-05-27
        相关资源
        最近更新 更多