printf()似乎改变了一个变量

时间:2017-06-17 19:54:47

标签: 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函数时遇到了类似的问题,但最小代码会更长)。  感谢您的反馈。

1 个答案:

答案 0 :(得分:6)

此:

  Node n(i);

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

  head=&n;

稍后再使用该地址。

之后,所有的赌注都会被取消,因为你处于未定义的行为状态。