Pointers 命令:删除[]x
我有以下简单的代码。我为3个double动态分配内存,我为每个double分配一个数字,在我释放内存之后,但是可以看到,如果运行代码,那么在删除之前和之后唯一的区别就是(delete[]x),唯一的区别就是向量的第一个double。我不明白为什么向量的第一个元素的内容发生了变化,而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
#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的内存?