我试图调用在堆中分配的函数。经过几次失败的尝试后,我在此网站上尝试了代码:
http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/85d5da8c-edef-44b0-b42e-deb5f3eb2524
该代码可以完美地工作。它可以编译,运行,给出正确/预期的结果,并且可以毫无问题地完成。
但是,如果我尝试添加类似std :: cout <
我想知道为什么会这样,如何解决这个问题。意识到这样做是出于学习的唯一目的,所以我对将其应用于实际用途没有兴趣。
如果我的堆函数调用了一个使用std :: cout来打印数据的函数,那么该代码也不起作用。
最佳答案
您的问题在于以下事实:将cout
代码添加到函数时,实际上会添加一些函数调用。 Microsoft C / C ++编译器使用一些基本的堆栈框架检查来检测运行时中的问题。这些检查通过在每次函数调用之后调用__RTC_CheckEsp
函数来执行。对__RTC_CheckEsp
的调用使用E8操作码,这意味着相对寻址。将样本函数移至堆时,对__RTC_CheckEsp
的调用由于跳转到错误的位置而变得错误。
禁用运行时堆栈框架检查(在Visual Studio 2010中):项目选项->配置属性-> C / C ++->代码生成->基本运行时检查->将其设置为未初始化的变量
重新编译。跑。请享用!
关于c++ - 为什么在堆中调用的该函数不能调用cout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10587507/