我想在空间上对一些树节点进行分区,但是在调试时会在断点处从 0xcccccccccccccccc
接收到std::partition
指针值。有人知道这意味着什么吗?
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
vector 的大小)m = 0xcccccccccccccccc
mid > 3000000000
我将
start
,end
和mid
的类型更改为uint32_t
而不是int
,因为我收到了mid
很大的负值,但是m
可以接受。编辑:我将断点放置得太早了。返回的指针是未知的,Visual Studio似乎根据它们自己的默认初始化来预先计算所有附近的值。
buildNodes
位于0x00000000050c0070m
位于0x0000000005161c58所以中= 82616->确定
最佳答案
m
尚未初始化-尚无有效值。 0xcccccccccccccccc
的实际值是系统用来填充内存的内容,以便可以检测未初始化的变量。专门选择此值是为了使其不是“有效的内存地址”-这样,您就不会偶然或故意使用未初始化变量的内存而不会出现某种错误或陷阱。