我对C++还比较陌生,请见谅。
我有以下程序,旨在学习动态内存分配。
#include<iostream>
#include<new>
using namespace std;
int main ()
{
int i,n;
int * p;
cout << "How many numbers would you like to enter? ";
cin >> i;
p = new (nothrow) int [i];
if (NULL == p){
cout << "Not enough memory!";
}else{
for (n=0; n<i; n++){
cout << "Enter a number: ";
cin >> p[n];
}
cout << "You have entered: ";
for(n=0; n<i; n++){
cout << p[n] << ", ";
}
delete[] p;
}
return 0;
}
只要输入一个合理的数量,程序就会按预期运行。但是当输入一个巨大的数字(1000000000000)时,我期望输出“内存不足”,但实际上它开始打印“输入一个数字:”,可能是1000000000000次,显然我没有等待输出。既然这在"else"检查的部分,为什么会发生这种情况?我猜测比较不起作用了。任何帮助都将不胜感激。谢谢。
if (!p)
,那就没有任何问题了,而且它也很易读(无需使用 Yoda 编程)。 - David Rodríguez - dribeas