我最近遇到了一个严重的错误,我忘记了在函数中返回一个值。问题是,即使没有返回任何内容,它在 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
登记。该寄存器(除其他外)还用作在内存中移动值时的临时存储以及计算期间的操作数。因此,该寄存器中剩下的任何值都被视为返回值,在您的情况下,它正是您想要返回的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)