示例程序崩溃

时间:2018-07-16 08:36:50

标签: c++ arrays multidimensional-array char

我正在尝试制作一个程序,其中用户通过添加*,/等字符来输入“形状”,然后在屏幕上打印用户输入的次数。该程序工作正常,但最后它说程序没有响应。有什么帮助吗?

#include <iostream>
using namespace std;

int main()
{
    int a,h=1 ,b=0, x=7;
    char test[a][100];
    cout<<"Input how many lines ";
    cin>>a;
    cout<<"Input how many repeats ";
    cin>>b;
    for(int j=1; j<=a; j++)
    {
        cin>>test[j];
    }

    while(h<=b)
    {
        for(int c=1; c<=a; c++)
        {
            cout<<test[c]<<"\n";
        }
        h++;
    }
    return 0;
 } 

1 个答案:

答案 0 :(得分:3)

您的代码在此处调用未定义行为(UB):

int a, ...;
char test[a][100];

您正试图使用​​未初始化变量(a)声明固定大小的2D数组。

此外,即使是可变大小数组也不是标准C ++。

如果启用警告标志(例如GCC中的Wall),则应获得:

prog.cc:7:21: warning: 'a' is used uninitialized in this function [-Wuninitialized]
     char test[a][100];
                     ^

此外,数组索引从0开始,在N-1处结束,其中N是数组的大小。所以你需要改变这个:

for(int j=1; j<=a; j++)

对此:

for(int j=0; j<a; j++)

以便正确访问数组,而不是在j获得a的值时出界。超出范围访问数组也会导致未定义行为