【问题标题】:Code Blocks doesn't show any error but still can't show output (0xC00000FD) [duplicate]代码块没有显示任何错误,但仍然无法显示输出(0xC00000FD)[重复]
【发布时间】:2020-12-08 15:01:32
【问题描述】:

我有这个代码:

#include <iostream>
#include <iomanip>

using namespace std;
main()
{
    int i, n, a[n], b[n], c[n];

    cout << "Program kreira nizove po matematickoj zavisnosti" << endl;
    cout << "Unesite vrednost n =" << endl;
    cin >> n;

    for (i = 0; i <=n; i++)
    {
        a[i] = (i+1)*2;

        if (i%2==0) b[i] = 2*i;
            else b[i] = -2*i;

        c[i] = a[i] - b[i];

    }
    cout << "A" << setw(3) << "B" << setw(3) << "C" << endl;
    cout << a[i] << setw(3) << b[i] << setw(3) << c[i] << endl;
}

它显示“进程返回 -1073741571 (0xC00000FD)” 找不到什么问题。 当我尝试其他代码时,它可以工作。 平台是 Win 10。

【问题讨论】:

标签: c++


【解决方案1】:

这一行:

int i, n, a[n], b[n], c[n];

有两个问题:

  1. 可变长度数组是非标准的,并且:

  2. n 未初始化,因此a[n] 尝试在堆栈上分配一个大小不确定的数组。在您的情况下,哪个太大并导致堆栈溢出。

所以,在使用之前初始化n,而不是使用可变长度数组,而是使用std::vector

【讨论】:

  • 好的,但是我需要获取消息,所以我可以输入 n 的值。你知道我该怎么做吗?
  • 你可以在询问n的值后输入int a[n], b[n], c[n];
  • 在那之后你还有其他错误。 for (i = 0; i &lt;=n; i++) 将导致关闭 1 错误。请记住 a[n] 超出范围,因此当 i == n 时,您正在访问数组末尾之外的一个元素。
  • @drescherjm 不,C++ 没有 VLA。请不要推荐这个。
【解决方案2】:

您正在使用非标准可变长度数组 (VLA) C++ 扩展,并且您有堆栈溢出,因为在声明 a[n] 之类的数组之前未初始化 n

如果你想继续使用VLA,需要移动声明int a[n], b[n], c[n]; 下面cin &gt;&gt; n;。或者改用std::vector&lt;int&gt;

【讨论】:

    【解决方案3】:

    已找到解决方案...这是最终结果:

    #include <iostream>
    #include <iomanip>
    using namespace std;
    main()
    {
        int i, n, a[100], b[100], c[100];
    
        cout << "Program kreira nizove po matematickoj zavisnosti" << endl;
        cout << "Unesite vrednost n = ";
        cin >> n;
        cout << "A" << setw(10) << "B" << setw(10) << "C" << endl;
    
        for (i = 0; i <= n; i++)
        {
            a[i] = (i+1)*2;
    
            if (i%2==0) b[i] = 2*i;
                else b[i] = -2*i;
    
            c[i] = a[i] - b[i];
    
            cout << a[i] << setw(10) << b[i] << setw(10) << c[i] << endl;
        }
    }
    

    我将数组的值更改为我永远不会使用的值(例如 100),并将 cout 放入 for 循环中,因此它可以将结果键入到另一个之下。它设法完美地工作。感谢您的帮助!

    【讨论】:

    • 在这种情况下使用固定长度的数组而不是向量是一个坏习惯。不要习惯它。您可以在玩具示例中摆脱它,但在实际软件中却不行。
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 2011-01-05
    • 2018-03-28
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多