C++ C++;从地址调用函数时程序崩溃

C++ C++;从地址调用函数时程序崩溃,c++,function,memory,C++,Function,Memory,这行不通 test.exe中0x00402826处未处理的异常:0xC0000005:Access 读取位置0x00000000时发生冲突 但这有效吗 int main() { typedef void function(void); function* Execute = (function*)0x00402810; Execute(); } intmain() { 无效(*func)(); func=&print; cout无法保证当您在main()之前声明print()时,它

这行不通

test.exe中0x00402826处未处理的异常:0xC0000005:Access 读取位置0x00000000时发生冲突

但这有效吗

int main()
{
  typedef void function(void);
  function* Execute = (function*)0x00402810;
  Execute();
}
intmain()
{
无效(*func)();
func=&print;

cout无法保证当您在main()之前声明print()时,它实际上被编译到main()之前的几个地址(正如人们所期望的)。从这里开始,由于第二个示例中的main()函数与第一个示例中的main()函数不同(较大),print()函数的地址可能在两个示例之间发生了更改

如果您真的想找出函数的地址,我建议您使用调试器来找出它


希望有帮助。

您是否尝试过使用
typedef void(function*)();
而不是
typedef void function(void)
?您如何保证您的函数实际从0x402810开始?您不能!编译器可以随意移动您的函数。是的,它可以处理下面的代码。
int main()
{
  typedef void function(void);
  function* Execute = (function*)0x00402810;
  Execute();
}
int main()
{
  void(*func)();
  func = &print;
  cout << func;
  getchar();

  typedef void function(void);
  function* Execute = (function*)0x00402810;
  Execute();
 }