我想在空间上对一些树节点进行分区,但是在调试时我在断点处从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
,因为我收到{{1}的巨大负值} {} mid
的可接受值。
编辑:我过早地放置了断点。返回的指针尚不为人所知,Visual Studio似乎根据自己的默认初始化预先计算了所有附近的值。
m
位于0x00000000050c0070
buildNodes
位于0x0000000005161c58
所以mid = 82616 - &gt;确定
答案 0 :(得分:3)
m
未初始化 - 它还没有有效值。 0xcccccccccccccccc
的实际值是系统填充内存,以便可以检测未经初始化的变量。这个值是专门挑选的,因此它不是有效的内存地址&#34; - 这样,您不会意外或故意使用未初始化变量的内存而不会出现某种错误或陷阱。