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

Pet*_*nek 0 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);
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

s.head->next: 00000000
s.head->next: FFFFFFFE
Run Code Online (Sandbox Code Playgroud)

怎么可能我没有得到相同的?(我在使用std:cout函数时遇到了类似的问题,但最小代码会更长).感谢您的反馈.

小智 6

这个:

  Node n(i);
Run Code Online (Sandbox Code Playgroud)

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

  head=&n;
Run Code Online (Sandbox Code Playgroud)

并在以后使用该地址.

在那之后,所有的赌注都会被取消,因为你处于未定义的行为领域.

  • @PeterFranek像Neil所说,你做的是完全未定义的行为.这可能会抹掉你的DD,在时空中创建一个新的维度,或者可能在火星上发送poney.http://en.cppreference.com/w/cpp/language/ub (2认同)