Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 命令:删除[]x_Pointers_Allocation - Fatal编程技术网

Pointers 命令:删除[]x

Pointers 命令:删除[]x,pointers,allocation,Pointers,Allocation,我有以下简单的代码。我为3个double动态分配内存,我为每个double分配一个数字,在我释放内存之后,但是可以看到,如果运行代码,那么在删除之前和之后唯一的区别就是(delete[]x),唯一的区别就是向量的第一个double。我不明白为什么向量的第一个元素的内容发生了变化,而x的内容在相同的内存地址下保持不变 #include <iostream> #include <cmath> int main(int argc, char * argv[]) { d

我有以下简单的代码。我为3个double动态分配内存,我为每个double分配一个数字,在我释放内存之后,但是可以看到,如果运行代码,那么在删除之前和之后唯一的区别就是(delete[]x),唯一的区别就是向量的第一个double。我不明白为什么向量的第一个元素的内容发生了变化,而x的内容在相同的内存地址下保持不变

#include <iostream>
#include <cmath>

int main(int argc, char * argv[])
{
    double * x;
    x = new double [3];
    x[0] = 1; x[1]=3; x[2]=5;
    std::cout << x[0] << " " << x[1] << " " << x[2] << "\n";
    std::cout << x << "\n";
    delete[] x;
    std::cout << x[0] << " " << x[1] << " " << x[2] << "\n";
    std::cout << x << "\n";
    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
双*x;
x=新双精度[3];
x[0]=1;x[1]=3;x[2]=5;

std::cout据我理解,这是未定义的行为;
x
在被删除后被读取。

你所说的“这是未定义的行为”是什么意思?你执行了吗?我在运行1 3 5 0x1acc010 0 3 5 0x1acc010后看到以下内容。x指向相同的地址,并且只更改了向量的第一个元素。术语“未定义行为”是C++标准所使用的术语,意思是“所有的赌注都是关于你尝试的情况。”如果在删除内存后访问内存,则会出现未定义的行为,这意味着原则上任何事情都可能发生。它可能会立即使程序崩溃。它可能会显示随机生成的值。或者(原则上,但实际上不是这样)它可以创造一个奴役人类的有知觉AI。:-)好的。但另一个问题是删除后分配给x free的内存?