C++ 动态存储器c+的初始化+;
在下面的代码中,我希望在C++ 动态存储器c+的初始化+;,c++,C++,在下面的代码中,我希望在x数组中的所有10元素中初始化1。但是,它似乎不起作用。我能知道我在这里错过了什么吗 int main() { int *x = new int[10]; for(int i =0; i <10; ++i){ *x = 1; x++; } for(int i = 0; i < 10; ++i) std::cout<<i<<" is "<<x[i]<<std::endl; re
x
数组中的所有10
元素中初始化1
。但是,它似乎不起作用。我能知道我在这里错过了什么吗
int main() {
int *x = new int[10];
for(int i =0; i <10; ++i){
*x = 1;
x++;
}
for(int i = 0; i < 10; ++i)
std::cout<<i<<" is "<<x[i]<<std::endl;
return 0;
}
intmain(){
int*x=新的int[10];
对于(int i=0;i,当您结束初始化循环时,您的x指向最后分配的元素之外。在第二个forloop之前,您需要重新调整x以指向内存的开始
x -= 10;
更好的办法是将您的移动指针作为副本保存
int *xcopy = x;
for(int i =0; i <10; ++i){
*xcopy = 1;
xcopy++;
}
int*xcopy=x;
对于(int i=0;i您在第一个循环中递增x
,因此之后它指向数组的末尾。第二个循环使用该新值从末尾以外的内存中读取,给出未定义的行为
最好的选择是停止篡改指针,并具有修复内存泄漏的额外功能:
std::vector<int> x(10, 1);
for(size_t i = 0; i < x.size(); ++i) {
std::cout<<i<<" is "<<x[i]<<std::endl;
}
std::向量x(10,1);
对于(大小i=0;i std::cout您的代码具有未定义的行为,因为您正在访问一些随机内存(您已经更改了x
)
您不应该更改x
(指针)。相反,您可以使用x[i]=1;
或使用其他一些临时指针来“循环”x
你也可以像@Mohit Jain所说的那样减少x
,但我不建议改变x
的指向。这无疑是在C++
中做这件事的最好方法
std::vector<int> x(10, 1);
for(size_t i = 0; i < x.size(); ++i) {
std::cout<<i<<" is "<<x[i]<<std::endl;
}