c++ - 示例程序崩溃

标签 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;
 } 

最佳答案

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

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

您正在尝试使用未初始化 变量 (a) 声明一个固定大小的二维数组。

此外,即使是,可变大小数组也不是标准 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 的值时发生的越界。越界访问数组也会导致未定义的行为

关于c++ - 示例程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51357711/

相关文章:

c++ - 代码背后的逻辑

c++ - move 构造函数与复制省略

c++ - 在 MousePressEvent 中使用 QDialog

Java:在输出文件中获取零

c - 二维数组使用函数扫描对

c++ - 运行时错误 : reference binding to misaligned address 0xbebebebebebebec6 for type 'int' ,,需要 4 字节对齐 (STL_vector.h)

javascript - 如何从数组中提取特定值?

arrays - 如果有一个(Perl),在满足特定条件的数组中查找项目?

ios - 对于特定对象,使一个数组等于另一个数组

JavaScript 迭代二维数组并返回不匹配项