c++ - 如何解决突然终止自身的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;
}
解决方案
这条线
int *Angka = new int(x);
在堆上创建一个整数,其值由x
它保存在这里0
。
您正在访问不应该访问的内存,正如@fredrik 所提到的,它可能会导致缓冲区溢出。
如果你想在堆上创建一个数组,你应该这样做
int *Angka = new int[x];
这会创建一个 size 的数组(在堆上)x
。
但是由于您使用的是c ++,因此最好使用向量,您可以简单地创建一个向量
std::vector<int> Angka;
Vector 将负责内存分配和所有其他您必须处理的事情,如果您要使用new
.