由于元素的数量是由某些条件决定的,我写了一个像这样的程序;
int i = 0;
int *layer;
while (i != 12){
layer = new int;
layer[i] = i;
cout << layer[i] << endl;
i++;
}
delete[] layer;
return 0;
我得到了结果;
int i = 0;
int *layer;
while (i != 12){
layer = new int;
layer[i] = i;
cout << layer[i] << endl;
i++;
}
delete[] layer;
return 0;
然后程序崩溃。这是什么原因以及如何修改程序以便为未知数量的元素分配内存?
提前致谢!
答案 0 :(得分:1)
您有未定义的行为。您为单个int
分配空间,然后将其视为数组。
layer = new int; // single int
layer[i] = i; // wat??
然后泄漏内存,然后在最后一个新发布的delete[]
上调用int
。由于不清楚您想要对代码执行什么操作,因此我只能提供一些建议:
std::vector<int>
用作动态数组。它会为你节省很多麻烦。new
分配数组(您可能不会),则需要new int[n]
,其中n
是元素数。delete []
次致电new[]
,delete
致new
。