stl容器和指针的奇怪行为

Jef*_*hen 2 c++ stl

我不明白为什么以下不起作用:

queue<int*> q;

int counter = 1;
for (int i = 0; i < 3; i++) {
    int a[1] = {counter};
    q.push(a);
    counter++;
}

while (!q.empty()) {
    int *top = q.front();
    q.pop();

    cout << top[0] << endl;
}
Run Code Online (Sandbox Code Playgroud)

它应打印出来:1 2 3,但打印出3 3 3.这是因为每次运行循环后队列中的指针都是相同的.为什么会这样?

Sjo*_*erd 8

您正在存储指向局部变量的指针,并在它们指向的局部变量超出范围之后使用这些指针.

换句话说:您正在调用未定义的行为.

结果:不应打印出"1 2 3".它不需要做任何事情,并允许做任何它喜欢的事情."3 3 3"对我来说似乎很合理,因为它也被允许崩溃.