我有以下代码.
#include <iostream>
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
std::cout << *p;
*p = 8;
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
而代码只是运行而没有运行时异常!
输出是 58
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
#include <stdio.h>
int ?addition(int a, int b){
int c = a + b ;
int ?d = &c ;
return d ;
}
int main (void) {
int result = ?(addition(1, 2));
int ?resultptr = addition(1, 2);
printf(”result = %d\n”, ?resultptr);
printf(”result = %d\n”, result);
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
这将给出正确的答案.但奇怪的是,一旦我互换了最后两个printf()的顺序,就会给出异常的答案.
printf(”result = %d\n”, result);
printf(”result = %d\n”, ?resultptr);
Run Code Online (Sandbox Code Playgroud)
这是为什么?是因为printf()的一些内部实现?
我打开了-Wall选项,但没有显示警告.
谢谢您的回答!这是我在stackoverflow上的第一个问题.
但为什么反转顺序会给出不同的答案?如果是由于返回局部变量的未定义行为,为什么第一个程序给出正确答案但第二个程序不能,而唯一的区别是printf()的顺序?