为什么这个用于打印数组的简单代码不起作用?
void main()
{
cout<<"Simple for\n";
int n;
cout<<"Enter the lenght of array:";
cin>>n;
int* a= new int[n];
for(int j=0; j<n; j++){
a[j]=0;
cout<<setw(8)<<a[j];
//getchar();
}
getchar();
delete[]a;
}
输出很快消失。
当n是常数时,它可以工作但是当n来自输入时它不起作用。 当getchar放入For时,它只打印出任意长度的数组的两个元素。
有什么问题?
答案 0 :(得分:2)
你可能想要这个:
int* a= new int[n];
C ++不是C;你没有用new
分配“字节”;你分配对象。数组,类型等因此,如果您想要一个类型为n
的{{1}}数组,那么您可以分配它。不需要int
,乘法等。
请注意,必须使用数组版本的delete删除使用数组版本sizeof
分配的任何内容(即:new
):
new Type[]
尺寸不必要;您只需确保delete []a;
与new[]
答案 1 :(得分:2)
此分配
int* a= new int(n*sizeof(int));
仅分配一个int
并将其初始值设置为n*sizeof(int)
。不完全是你想要的。
分配n个int的正确方法是
int* a = new int[n];
甚至更好
std::vector<int> a(n);
答案 2 :(得分:0)
谢谢大家 问题已经解决了.. 但我不知道为什么。 任何人都可以在这里解释另一个getchar()的角色吗?
这是新代码:
int main()
{
cout<<"Simple for\n";
int n;
cout<<"Enter the lenght of array:";
cin>>n;
int* a= new int[n];
for(int j=0; j<n; j++){
a[j]=0;
cout<<setw(8)<<a[j];
}
delete[]a;
getchar();
getchar();
}