相关疑难解决方法(0)

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#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

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

什么是复制省略和返回值优化?

什么是复制省略?什么是(命名)返回值优化?他们意味着什么?

它们会在什么情况下发生?有什么限制?

c++ optimization c++-faq return-value-optimization copy-elision

350
推荐指数
4
解决办法
7万
查看次数

为什么反转printf()的顺序会给出不同的输出?

#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()的顺序?

c

-2
推荐指数
1
解决办法
422
查看次数