【发布时间】:2026-01-29 15:05:01
【问题描述】:
当我将 struct 的指针推入 std::queue,然后弹出该值时,我返回的值将变为零。我已经简化了实际代码来说明下面的问题。实际代码中的head 指针是一个类变量,包含其他值。如果我将head 推送到队列中,我得到的所有其他值也会变为未初始化。
这可能是什么问题?
注意:PipePixel *head;是类头文件中声明的实例变量。
添加头部功能:
void LinkedGraph::addHeadPixel(int index) {
PipePixel pixel = {NULL, 433, std::vector<PipePixel*>()};
pixel.index = index;
if (head==NULL) {
pixelMap[index] = &pixel;
head = &pixel;
} else {
printf("Already added head pixel! Px:%d\n", pixelMap[index]->index);
}
}
打印函数:
std::queue<PipePixel*> printQueue;
printQueue.push(head);
printf("headIndex:%d\n", head->index); // headIndex:433
while (!printQueue.empty()) {
PipePixel *child = printQueue.front();
printf("childIndex:%d\n", child->index); //childIndex:0
printQueue.pop();
if (child == NULL) {
printf("child is null"); // no output
continue;
}
}
PipePixel 结构:
struct PipePixel {
PipePixel *parent;
int index; //pixel index
std::vector<PipePixel*> children;
};
【问题讨论】:
-
在哪里您声明了
pixel变量?它是否在另一个范围内(比如在另一个函数中)而不是你的打印循环?您可以尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们吗? -
希望这些变化有所帮助