传递字符串引用作为参数时的Bad Ptr

时间:2011-06-08 10:08:02

标签: c++ visual-c++ opencv cuda

我一直试图理解为什么以下代码在字符串'filename'上给我一个错误的指针:

Mat imread(const string& filename, int flags) { 
    // some code returning a Mat object 
}

int main() {
    string s = "test.jpg";
    imread(s, 0);
}

我已经一步一步地进行了调试,所有我得到的就是在进入imread之前,字符串很好(我能够检查它的每个元素),但之后它是不可能的这样做,调试器指责坏Ptr。我不确定我理解为什么会这样。

您知道,我正在使用Visual Studio 2008和OpenCV 2.2。

编辑:我确实忘了说一件重要的事情,这对我解决这个问题至关重要:我在.cu文件上编写这段代码,因此在第一时间由nvcc编译。

2 个答案:

答案 0 :(得分:4)

为本机代码编写调试器是一项非常重要的任务。机器代码与源代码之间没有1对1的对应关系。调试器通常会提供这种误导性信息,但这并不意味着实际值无效。还要确保在打开调试信息的情况下进行编译,并关闭所有优化。

注意:当您进入函数时,堆栈帧可能尚未初始化。再做一步可能会显示正确的参数。

答案 1 :(得分:0)

我通过在不同文件中将所有OpenCV代码与涉及CUDA扩展的代码分开来解决了这个问题。因此,现在从.cpp文件调用imread,并且涉及CUDA的所有内容都在不同的.cu和.h文件中。

如果我错了,请纠正我,但我不认为这应该是那样,也许这是一个错误。