为什么我有时会在指针中得到一个奇怪的地址

时间:2016-01-08 12:57:12

标签: c++

所以,我正在使用C ++和openFrameworks。有时当我尝试获取指向类实例的指针时,通常我得到类似的东西(00000000038468B0)。或者当它不存在时,它返回一个nullptr。一切都是编程的,因此值可以是nullptr,也可以是实际的实例。

我这样做总是将指针的值设置为头文件中的nullptr。

someClass* someInstance = nullptr;

当我删除一个实例时,我总是在对此实例的任何引用中将其设置回nullp。

但有时指针返回DDDDDDDDDDDDDDD,这意味着应用程序将崩溃,因为它会通过我的安全if if语句,在使用它之前检查指针是否为nullptr。

任何人都知道DDDDDDDDDDDDDDD是什么?我似乎无法找到任何有关它的信息......

3 个答案:

答案 0 :(得分:6)

根据此页面:Win32 Debug CRT Heap Internals

  

记住每个填充模式意味着什么的助记符:

     

新分配的内存(0x C D)是清洁内存。

     

free()d内存(0x D D)是死记忆。

     

保护字节(0x F D)就像是你记忆中的围栏。

因此,假设您的平台是Win32,那么看起来指针所在的内存已被释放。

它表明您一直在访问无效内存,在这种情况下您将有未定义的行为。

答案 1 :(得分:1)

指针本身必须是某个其他对象中的成员。指针所属的整个对象已被删除,但您仍在使用它。

所以看看指针的使用与症状以及它所指向的事物的删除和创造是远离问题的一个层次。

您应该正在寻找删除指针所属对象的对象。

答案 2 :(得分:1)

myHello是一个对象指针 并且conc_2D_P是这里的一种方法

cout << "Check1 " << (myHello->conc_2D_P);
delete myHello;
cout << "Check2 " << (myHello->conc_2D_P)<<endl;

运行此代码段后,我们得到的输出为

检查1 0000017C3EF89A70

Check2 DDDDDDDDDDDDDDDDDD

在第二行代码中,我们删除了整个对象指针,但是在下一行中,我们再次尝试访问它,因此尝试了DDDDDDDDDDDDDDDDDD。