Я пишу простую программу на C++, которая выделяет динамическую память для моей Программы, а затем удаляет эту память. Вот моя программа:Бесконечный цикл без принятия ввода
#include <iostream>
#include <new>
using namespace std;
int main()
{
int i,n;
int * p;
cout << "How many numbers would you like to type? ";
cin >> i;
p= new (nothrow) int[i];
if (p == nullptr)
cout << "Error: memory could not be allocated";
else
{
for (n=0; n<i; n++)
{
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<i; n++)
cout << p[n] << ", ";
delete[] p;
}
return 0;
}
В приведенной выше программе, когда я ввода значение I (Количество входов), равный или меньше, чем 2 миллиарда, чем эта программа работает, как ожидалось. Однако, когда я ввожу что-либо выше 2 миллиардов, как 3 миллиарда или выше, эта программа переходит в бесконечный цикл без ввода числа в мой цикл for.
Я ожидаю, что эта программа потерпит неудачу, когда я введу очень высокое значение для i, заявив, что не может выделить память.
Как я понимаю, когда я вхожу в очень высокое значение int i, я выхожу из привязанного к целочисленному типу данных, но все же в этом случае он должен принимать числовые данные от меня в цикле, поскольку я есть инструкция cin там вместо того, чтобы идти в цикл или распределение памяти, должно потерпеть неудачу просто.
Когда я изменил тип i из int в long, тогда он работает, но мне любопытно узнать для i типа int, почему он идет в бесконечном цикле вместо того, чтобы принимать значения, когда видит cin in for loop?
Я запускаю эту программу на Mac OS X и компилирую ее с помощью компилятора g ++.
Предположим, что даже если я становится -1, тогда в этом случае мой цикл для ввода номера не должен выполняться вообще, а затем программа должна завершиться, правильно? Думаю, он не должен идти в бесконечном цикле? –
Это не ответ, но поскольку вы хотите, чтобы пользователь вводил позитивные числа, вы должны использовать 'unsigned int' или, возможно,' unsigned long' вместо 'int'. – Cyclonecode
Вы пытались проверить значение i в отладчике или написать его cout? –