c++ - 为什么将 char* 传递给此方法会失败?

标签 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 函数调用永远不会返回(就像它刚刚跨过)并且我的程序恢复它是在调用 DoFoo 之后执行。

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

有人遇到过这种情况吗?我做错了什么吗?

谢谢。

最佳答案

您需要使用调试设置来构建项目。发布设置意味着启用了优化,而优化使调试变得轻而易举。

如果不进行优化,C++ 代码中的语句与程序中的机器代码块之间的对应关系非常密切。该程序速度较慢(通常慢得多)但更容易调试,因为您可以观察每个语句的作用。

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

关于c++ - 为什么将 char* 传递给此方法会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720167/

相关文章:

c++ - 自定义类的 std::make_pair 段错误

c++ - 如何在 C++ 中声明 std::bind 的 std::invoke_result?

c++ - 模板错误代码块,C++,代码块,错误

pointers - 将 map 的值指针添加到 slice 的行为

c - 如何使用 fwrite 将指针数组的内容写入文件?

c++ - 设计问题 : Message processing components. .. 调用 incorect 重载函数

javascript - 允许 javascript 函数接受任意数量的参数

c - 数组元素交换函数

PHP - 表单验证函数。如何使用函数来编写更好的代码?

c++ - 从基类识别派生类