c++ - printf() 似乎改变了一个变量

标签 c++

我是 cpp 初学者,无法理解为什么在下面的代码中,printf()... 函数似乎更改 一些变量。代码或我的编译器安装有问题吗?

#include <iostream>
#include<stdio.h>

class Node
{
public:
    int val;
    Node * next;

    Node(int v) { // constructor
        val=v;
        next=NULL;
    }
};

class Stack
{
public:
    Node *head;
    Stack(int i) // constructor
    {
        Node n(i);
        head=&n;
    }
};

int main() 
{
    Stack s(1);
    printf("s.head->next: %p\n",s.head->next);
    printf("s.head->next: %p\n",s.head->next);
}

我得到以下输出:

s.head->next: 00000000
s.head->next: FFFFFFFE

我怎么可能不一样呢? (我在使用 std:cout 函数时遇到了类似的问题,但最小代码会更长)。 感谢您的反馈。

最佳答案

这个:

  Node n(i);

创建一个局部变量,然后存储地址:

  head=&n;

稍后使用该地址。

在那之后,所有赌注都取消了,因为您处于未定义行为领域。

关于c++ - printf() 似乎改变了一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44608839/

相关文章:

c++ - 多态 lambda 的非类型模板参数?

c++ - 在 C++ 中声明 vector 时出现意外错误

c++ - 如何重置单选按钮?设置回默认值

python - vim 的 Youcompleteme 插件无法为来自 errno.h 的错误代码提供补全

c++ - 剔除点云中的受阻点

c++ - 我可以使用 GCC 将 C/C++ 代码编译为操作码级 C

c++ - Poco C++ 中的 undefined symbol

c++ - 为什么 g++ 仍然需要 -latomic

c++ - 如何将pdf文件存储为二进制文件

c++ - 无法从大括号括起来的初始值设定项列表转换为 std::vector