gpt4 book ai didi

c++ - 指针队列改变它的值

转载 作者:行者123 更新时间:2023-11-28 05:59:44 25 4
gpt4 key购买 nike

当我将结构指针插入 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;
}
}

管道像素结构:

struct PipePixel {

PipePixel *parent;
int index; //pixel index
std::vector<PipePixel*> children;
};

最佳答案

这里的问题是变量 pixelLinkedGraph::addHeadPixel 函数中是局部的。一旦函数返回,该对象就会被破坏,变量也不复存在。如果您存储了一个指向局部变量的指针,该指针将不再指向有效对象,并且取消引用该指针会导致未定义的行为

我的建议是完全不使用指针,而让编译器处理对象复制。对于如此小而简单的对象,它可能对性能产生的影响可以忽略不计。

关于c++ - 指针队列改变它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com