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;istd::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;
}