首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我删除数组时指针到哪里去了?指向数组的指针与数组中的元素之间的差异

当我删除数组时指针到哪里去了?指向数组的指针与数组中的元素之间的差异
EN

Stack Overflow用户
提问于 2016-12-29 19:31:59
回答 3查看 89关注 0票数 0

好的,我有两个指针,一个初始化新数组:

代码语言:javascript
复制
int * array = new int [5];
int * ptr = &array[0]; // or "= array", is this the same?

现在让我们分配一些价值

代码语言:javascript
复制
array[0] = 12;

现在检查它们是否指向相同的入口和值。

代码语言:javascript
复制
cout << "Adress under array: "<< array << " Value under array: "<< array[0] <<
" Adress under ptr: "<< ptr << " Value under ptr: " << *ptr;

输出显示相同的进位,12次显示两次。现在让我们删除数组:

代码语言:javascript
复制
delete [] array;

现在我的问题是:

代码语言:javascript
复制
cout << array;

输出与以前不同的地址。加在

代码语言:javascript
复制
cout << *ptr;

不输出12,因此旧数组中的值发生了更改。

那么,删除数组[]array后指针指向哪里?另一个问题是指向数组的数组指针,还是仅用于int的指针?

我知道int *ptr[x]将是一个指向x整数数组的指针,但是我没有在左边使用方括号,int * array = new int [5],那么array是指向数组的第一个元素的指针吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-29 19:42:00

当您执行delete [] array;时,array中保存的地址将成为无效的指针值,因此您甚至无法可靠地检查它以便打印它。

当到达存储区域的持续时间结束时,表示该存储区域任何部分的地址的所有指针的值都变为无效指针值(3.9.2)。通过无效指针值间接性和将无效指针值传递给去分配函数具有undefined行为。任何其他无效指针值的使用都具有实现定义的行为.

票数 3
EN

Stack Overflow用户

发布于 2016-12-29 19:42:27

delete之后访问数组--这是未定义的行为--意味着任何事情都可能发生,不能保证任何一致的结果--如果您这样做,程序就会有错误,并且它的执行不再是定义良好的。即使仅仅读取指针值也是实现定义的,您无法确定跨实现得到了什么。

所以简单地说,不要那样做。

票数 1
EN

Stack Overflow用户

发布于 2016-12-29 19:45:48

int* ptr[5]int* ptr = new int[5];是有区别的

第一个是创建一个大小为5的指针数组,另一个是创建一个指向大小为5的整数数组的指针。

int* ptr = &array[0];和说int* ptr = array;一样

看见。通过执行int* int5 =新的

  1. 创建一个具有5个整数值的数组
  2. 创建指向数组的第一个()地址的指针.这意味着,如果指向&array[0],则与array相同

删除后,指针指向一个已分配内存的地址,该地址将导致未定义的行为,因为之后您不知道在这个地址上分配了什么

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41386084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档