为什么将char *传递给此方法失败?

时间:2011-04-19 17:17:34

标签: c++ function pointers char

我有一个C ++方法,例如:

bool MyClass::Foo(char* charPointer)
{
   return CallExternalAPIFunction(charPointer);
}

现在我在其他地方有一些静态方法,例如:

bool MyOtherClass::DoFoo(char* charPointer)
{
    return _myClassObject.Foo(charPointer);
}

我的问题是我的代码在那时断开了。它不会退出应用程序或任何东西,它永远不会返回任何值。为了尝试找出问题,我使用Visual Studio 2010调试器逐步完成了代码,发现了一些奇怪的东西。

当我进入DoFoo函数并将鼠标悬停在charPointer上时,我实际上看到了它被调用的值(在这种情况下是一个IP地址字符串)。但是,当我进入Foo并将鼠标悬停在charPointer上时,没有任何内容显示,外部API函数调用永远不会返回(就像它刚刚过去一样)并且我的程序在调用{之后恢复执行{1}}。

我还尝试使用VS调试器的DoFoo功能(以获取第一次机会异常),但它从未拾取任何内容。

这曾经发生在任何人身上吗?我做错了吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

您需要使用Debug设置构建项目。发布设置意味着启用了优化,并且优化使调试受到打击。

在没有优化的情况下,C ++代码中的语句与程序中的机器代码块之间存在非常密切的对应关系。程序速度较慢(通常要慢得多),但调试起来比较容易,因为你可以观察每个语句的作用。

优化器重新排序代码,消除变量,内联函数,展开循环,并执行各种其他操作以使程序快速运行。程序更快(通常更快),但调试起来要困难得多,因为C ++代码中的语句与机器代码中的指令之间的对应关系不再存在。