从std :: partition接收0xcccccccccccccccc指针值是什么意思?

时间:2014-09-18 10:07:03

标签: c++

我想在空间上对一些树节点进行分区,但是在调试时我在断点处从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=0end=407838buildNodes向量的大小)

m = 0xcccccccccccccccc
mid > 3000000000

我将startendmid的类型更改为uint32_t而不是int,因为我收到{{1}的巨大负值} {} mid的可接受值。

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

m位于0x00000000050c0070 buildNodes位于0x0000000005161c58 所以mid = 82616 - &gt;确定

1 个答案:

答案 0 :(得分:3)

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