首页 > 解决方案 > 如何解决突然终止自身的while循环?

问题描述

我有代码来查找从用户那里获取输入的排列,直到用户对添加的输入量感到满意。

但是,当接收到超过 4 倍的输入时,代码会突然卡住/终止。我尝试将数组类型更改为动态内存,但结果仍然相同。

奇怪的是,当我使用http://cpp.sh/测试这段代码时,它运行正常。我认为问题出在我的编译器上(我使用 VS 代码和 MinGW 来编译和运行它。)你认为有什么问题?

我的代码如下:

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

int main() {

    int KombAngka;
    bool Lanjut = true;
    int x = 0;
    int *Angka = new int(x);
    
    string YaTidak;
        
    while(Lanjut) {         
        
        cout << "Number-" << x + 1 << ": "; 
        cin >> Angka[x];
        
        LoopYaTidak:

        cout << "Are the numbers enough?(y/n)?: ";
        cin >> YaTidak;

        if (YaTidak == "y") {
            Lanjut = false;
        }
        else if (YaTidak == "n") {
            Lanjut = true;
        }
        else {
            cout << "Enter the correct answer!(y/n)" << endl;
            goto LoopYaTidak;
        }
        
        x++;
    
    }

    cout << "All numbers: (";

    for (int z = 0; z <= x - 2; z++) {
        cout << Angka[z] << ", ";
        }

    cout << Angka[x - 1] << ")" << endl;

    cout << "The number of combinations of numbers used: ";
    cin >> KombAngka;

    int JumlahAngka = x;
    const int StopLoop = JumlahAngka - KombAngka;

    for (int i = JumlahAngka - 1; i > StopLoop; i--) {
        JumlahAngka = JumlahAngka * i;
    } 
      
    cout << "The number of queue numbers consisting of " << KombAngka << " different numbers are " << JumlahAngka << endl;
    
    system("pause");
    return 0;
}

标签: c++

解决方案


这条线

int *Angka = new int(x);

在堆上创建一个整数,其值由x它保存在这里0

您正在访问不应该访问的内存,正如@fredrik 所提到的,它可能会导致缓冲区溢出。

如果你想在堆上创建一个数组,你应该这样做

int *Angka = new int[x];

这会创建一个 size 的数组(在堆上)x

但是由于您使用的是c ++,因此最好使用向量,您可以简单地创建一个向量

std::vector<int> Angka;

Vector 将负责内存分配和所有其他您必须处理的事情,如果您要使用new.


推荐阅读