元素数量未知的内存分配
Memory allocation with unknown number of elements
由于元素个数是由一些条件决定的,所以我写了这样一个程序;
<code>int i = 0;
int *layer;
while (i != 12){
layer = new int;
layer[i] = i;
cout << layer[i] << endl;
i++;
}
delete[] layer;
return 0;
我得到了结果;
<code>0
1
2
3
4
5
6
然后程序崩溃。这是什么原因,我应该如何修改程序以便为未知数量的元素分配内存?
提前致谢!
您有未定义的行为。您为单个 int
分配 space,然后将其视为一个数组。
layer = new int; // single int
layer[i] = i; // wat??
然后你泄漏了内存,然后你在最后更新的 int
上调用 delete[]
。由于不清楚你想用你的代码做什么,我只能提供一些建议:
- 考虑使用
std::vector<int>
作为动态数组。它将为您省去很多麻烦。
- 如果您必须使用
new
分配数组(您可能不需要),则需要 new int[n]
,其中 n
是元素的数量。
- 每
new[]
调用 delete []
,每 new
调用 delete
。
由于元素个数是由一些条件决定的,所以我写了这样一个程序;
<code>int i = 0;
int *layer;
while (i != 12){
layer = new int;
layer[i] = i;
cout << layer[i] << endl;
i++;
}
delete[] layer;
return 0;
我得到了结果;
<code>0
1
2
3
4
5
6
然后程序崩溃。这是什么原因,我应该如何修改程序以便为未知数量的元素分配内存?
提前致谢!
您有未定义的行为。您为单个 int
分配 space,然后将其视为一个数组。
layer = new int; // single int
layer[i] = i; // wat??
然后你泄漏了内存,然后你在最后更新的 int
上调用 delete[]
。由于不清楚你想用你的代码做什么,我只能提供一些建议:
- 考虑使用
std::vector<int>
作为动态数组。它将为您省去很多麻烦。 - 如果您必须使用
new
分配数组(您可能不需要),则需要new int[n]
,其中n
是元素的数量。 - 每
new[]
调用delete []
,每new
调用delete
。