从std::partition接收0xcccccccccc指针值意味着什么
What does it mean to receive a 0xcccccccccccccccc pointer value from std::partition?
我想对一些树节点进行空间分区,但在调试时,我在断点处收到了来自std::partition
的0xcccccccccccccccc
指针值。有人知道这意味着什么吗?
template <typename NodeData> struct PartitionPredicate {
PartitionPredicate(float s, uint32_t a) : splitPos(s), splitAxis(a) {}
float splitPos;
uint32_t splitAxis;
bool operator()(const NodeData *data) const {
return data->p[splitAxis] <= splitPos;
}
};
...
const NodeData **m = std::partition(&buildNodes[start], &buildNodes[end], PartitionPredicate<NodeData>(splitPos, splitAxis));
uint32_t mid = start + (m - &buildNodes[start]);
// buildNodes is of type const NodeData **
...
值:start=0
、end=407838
(buildNodes
矢量大小)
m = 0xcccccccccccccccc
mid > 3000000000
我将start
、end
和mid
的类型更改为uint32_t
,而不是int
,因为我收到了mid
的巨大负值,但m
的值是可以接受的。
编辑:我过早地放置了断点。返回的指针尚不清楚,Visual Studio似乎根据附近的所有值的默认初始化预先计算这些值。
buildNodes
位于0x00000000050c0070m
位于0x0000000005161c58所以mid=82616->ok
m
未初始化-它还没有有效值。0xcccccccccccccccc
的实际值是系统在内存中填充的值,因此可以检测未初始化的变量。这个值是专门挑选的,这样它就"不是一个有效的内存地址"——这样,你就不会意外或故意使用未初始化变量的内存而不会出现某种错误或陷阱。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 使用关系运算符比较指针意味着什么
- 如果 C# 指针被认为是"unsafe,"这是否意味着C++指针也是"unsafe"?
- Do C和C++标准意味着地址空间中必须只存在一个特殊值来表示空指针的值
- c++中大于零的指针,这意味着什么
- 当与指针进行比较时,行使所有可能的控制路径意味着什么
- 从std::partition接收0xcccccccccc指针值意味着什么
- 数组的大小和指针的大小意味着什么
- 释放一个指针意味着我不能像*p那样使用更多的指针