从std::partition接收0xcccccccccc指针值意味着什么

What does it mean to receive a 0xcccccccccccccccc pointer value from std::partition?

本文关键字:意味着 指针 什么 接收 std partition 0xcccccccccc      更新时间:2023-10-16

我想对一些树节点进行空间分区,但在调试时,我在断点处收到了来自std::partition0xcccccccccccccccc指针值。有人知道这意味着什么吗?

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=0end=407838buildNodes矢量大小)

m = 0xcccccccccccccccc
mid > 3000000000

我将startendmid的类型更改为uint32_t,而不是int,因为我收到了mid的巨大负值,但m的值是可以接受的。

编辑:我过早地放置了断点。返回的指针尚不清楚,Visual Studio似乎根据附近的所有值的默认初始化预先计算这些值。

buildNodes位于0x00000000050c0070m位于0x0000000005161c58所以mid=82616->ok

m未初始化-它还没有有效值。0xcccccccccccccccc的实际值是系统在内存中填充的值,因此可以检测未初始化的变量。这个值是专门挑选的,这样它就"不是一个有效的内存地址"——这样,你就不会意外或故意使用未初始化变量的内存而不会出现某种错误或陷阱。