作者:林伯勋玉萍竣梅 | 来源:互联网 | 2023-01-31 22:41
我是一个cpp初学者,很难理解为什么,在下面的代码中,printf()...函数似乎改变了一些变量.代码或编译器安装中有什么问题吗?
#include
#include
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> 小智..:
这个:
Node n(i);
创建一个局部变量,然后存储以下地址:
head=&n;
并在以后使用该地址.
在那之后,所有的赌注都会被取消,因为你处于未定义的行为领域.
@PeterFranek像Neil所说,你做的是完全未定义的行为.这可能会抹掉你的DD,在时空中创建一个新的维度,或者可能在火星上发送poney.http://en.cppreference.com/w/cpp/language/ub