c++ - 函数的返回值如何工作?

标签 c++ stack

我最近遇到了一个严重的错误,我忘记了在函数中返回一个值。问题是,即使没有任何返回,它在 Linux/Windows 下运行良好,仅在 Mac 下崩溃。我在打开所有编译器警告时发现了这个错误。

所以这是一个简单的例子:

#include <iostream>

class A{
public:
    A(int p1, int p2, int p3): v1(p1), v2(p2), v3(p3)
    {
    }

    int v1;
    int v2;
    int v3;
};

A* getA(){
    A* p = new A(1,2,3);
//  return p;
}

int main(){

    A* a = getA();

    std::cerr << "A: v1=" << a->v1 << " v2=" << a->v2 << " v3=" << a->v3 << std::endl;  

    return 0;
}

我的问题是如何在 Linux/Windows 下运行而不崩溃?底层如何返回值?

最佳答案

在 Intel 架构上,简单值(整数和指针)通常在 eax 寄存器中返回。该寄存器(除其他外)还用作在内存中移动值时的临时存储以及计算期间的操作数。因此,该寄存器中剩余的任何值都被视为返回值,在您的情况下,结果正是您想要返回的值。

关于c++ - 函数的返回值如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9653722/

相关文章:

c++ - 在具有多重继承的类构造函数中传递什么?

c++ - Spirit X3,指的是之前匹配的值

c - 难以理解连续的递归调用

c - 简单的堆栈程序不接受输入并崩溃

c++ - 将 std::stack .pop() 方法的结果存储到变量中

Java:使用弱引用堆栈

java - 复制堆栈中的元素?

c++ - 无符号字符连接

c++ - openmp 程序卡在 block 的末尾

c++ - QAbstractTableModel 并为单行发出 dataChanged