【发布时间】:2021-04-02 17:40:39
【问题描述】:
在example1中,设置元素由[]操作符完成,获取元素由指针递增*(data++)完成,看起来效果不错。另一方面,在 example2 中,设置和获取元素都是通过指针递增完成的,似乎不起作用。从这个比较中,我可以猜到指针增量似乎与元素设置不兼容。
您能否解释一下为什么会发生这种情况以及如何解决这个问题?
#include<iostream>
int main(){
{
std::cout << "=== example 1 ===" << std::endl;
int* data = new int [6];
for(int i=0; i<6; i++){
data[i] = i;
}
for(int i=0; i<6; i++){
std::cout << *(data++) << std::endl;
}
}
{
std::cout << "=== example 2 ===" << std::endl;
int* data = new int [6];
for(int i=0; i<6; i++){
*(data++) = i;
}
for(int i=0; i<6; i++){
std::cout << *(data++) << std::endl;
}
}
}
输出
=== example 1 ===
0
1
2
3
4
5
=== example 2 ===
60753
0
0
0
0
0
【问题讨论】:
-
在第二段代码中,在第一段之后:你认为
data会指向哪里?下次增加它时它会指向哪里? -
啊,我明白了
-
附带说明:这两个示例都在泄漏内存,因为您没有
delete[]'ing 分配由new[]分配的数组。这两个示例都丢失了指向该数组的原始指针。