为什么我有时会在指针中得到一个奇怪的地址
Why do I sometimes get a strange address in a pointer
因此,我正在使用C++和openFrameworks。有时,当我试图获得一个指向类实例的指针时,通常会得到这样的结果(0000000003846B0)。或者,当它不存在时,它会返回一个nullptr。所有内容都经过编程,因此值可以是nullptr,也可以引用实际实例。
我总是将指针的值设置为头文件中的nullptr。
someClass* someInstance = nullptr;
当我删除一个实例时,在对该实例的任何引用中,我总是将其设置回nullptr。
但有时指针返回DDDDDDDDDD,这意味着应用程序将崩溃,因为它将通过我的safety if语句,这些语句在使用指针之前检查指针是否为nullptr。
有人知道DDDDDDDDDD是什么吗?我似乎找不到任何关于它的信息…
根据此页面:Win32调试CRT堆内部
记忆每个填充模式的含义的助记符:
新分配的内存(0xCD)是干净内存。
free()d内存(0xdd)是死内存。
保护字节(0xFD)就像内存周围的栅栏。
因此,假设您的平台是Win32,那么指针所在的内存似乎被释放了。
这表明你一直在访问无效内存,在这种情况下,你会有未定义的行为。
指针本身必须是其他对象中的成员。指针所属的整个对象已被删除,但您仍在使用它。
因此,观察指针的使用及其指向的东西的症状、删除和创建,离问题只有一个层次的距离。
您应该查找指针所属对象的删除。
cout << "Check1 " << (myHello->conc_2D_P);
delete myHello;
cout << "Check2 " << (myHello->conc_2D_P)<<endl;
在运行这个片段时,我们得到的输出
支票0000017C3EF89A70
检查2 DDDDDDDDDD DDDDDD
在第二行代码中,我们删除了整个对象指针,但在下一行中,我们再次尝试访问它,从而访问DDDDDDDDDD。
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- ptrA = ptrB 是否等同于 ptrA = &*ptrB?,空值是否共享一个地址空间?
- 指向下一个地址的指针
- 若指针是一个地址,那个么什么是引用
- 表示一个地址需要多少内存
- 访问数组C++的最后一个地址的最安全方法
- 我的c++程序正在打印一个地址而不是一个值
- 是否有任何操作系统允许将内存从一个地址移动到另一个地址而不进行物理复制?
- 如果最后一个地址是0xFFFFFFFF,我如何获取数组结束后的地址
- 如何在c++中调用另一个地址空间中的函数
- 为什么"a->content"给我一个地址而不是一个值?
- 我如何发现什么写到一个地址使用c++
- 比起返回一个指针,返回一个地址能找到任何有用的应用吗?
- 访问存储在指针变量所指向的地址中的值(这是一个地址)返回垃圾值
- CreateFile()返回一个地址为FFFFFF的无效指针
- 当获取一个地址时,模板类型(类/函数)的实例化规则是什么?
- 获取从另一个地址指向的地址
- 成员函数指针-仅一个地址