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

时间:2015-05-06 16:19:03

标签: c++ function memory

void print()
{
  printf("Test");
}

这不起作用

  

test.exe中0x00402826处的未处理异常:0xC0000005:Access   违规读取位置0x00000000。

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();
 }

我正在使用/ Dynamicbase进行编译:否

所以地址在每次运行时都是静态的。

1 个答案:

答案 0 :(得分:0)

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

如果你真的想知道你的功能的地址,我建议使用调试器找出它。

希望它有所帮助。