首页 > 解决方案 > 什么是过度递增指针显示?C++

问题描述

所以我一直在课堂上练习构造函数和解构函数。我已经引用了一个void指向该类的指针,将其转换为int*并增加了 15 次(类的大小为 1 )。这就是我所拥有的。

PS。忘了提到在这个例子中我已经将原始指针递减了 15 次。

 created instance with value : 3
1

0x28ff1b
01101111
01101111
01101111
00000000
01101111
00000000
01101111
00000000
00000000
00000000
00000000
00000000
00000000
01110101
01011000
deleted instance

所以我的问题是:我在这里读什么?

我的基本假设是 cpp 代码的 PE,位于类变量的起始位置。但我不确定,我在十六进制编辑器中打开了 PE,但在任何地方都找不到“4f-4f-4f-00”系列。我正在使用带有 win 7 OS 和 c++11 的联想笔记本电脑。

标签: c++pointersincrement

解决方案


正如@Sam Varshavchik 所说并由@Jesper Juhl引用的那样,这是未定义行为的一个示例。

这些用户(和@user4581301)提到生成的代码undefined behaviour会导致乱码。这里的主要问题是从void*整数类型重铸,然后移出变量范围到未知数。

这样做,并操纵以这种方式获得的内存可以执行以下一项(或多项)操作:

  • 没有什么
  • 程序崩溃
  • 整台电脑着火,桌子倒塌
  • 任何其他可能发生的事情

当然,我绝不会推荐任何人在他们自己的机器上测试此代码,因为最坏情况的概率为 2/4。


推荐阅读