我一直试图理解为什么以下代码在字符串'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编译。答案 0 :(得分:4)
为本机代码编写调试器是一项非常重要的任务。机器代码与源代码之间没有1对1的对应关系。调试器通常会提供这种误导性信息,但这并不意味着实际值无效。还要确保在打开调试信息的情况下进行编译,并关闭所有优化。
注意:当您进入函数时,堆栈帧可能尚未初始化。再做一步可能会显示正确的参数。
答案 1 :(得分:0)
我通过在不同文件中将所有OpenCV代码与涉及CUDA扩展的代码分开来解决了这个问题。因此,现在从.cpp文件调用imread,并且涉及CUDA的所有内容都在不同的.cu和.h文件中。
如果我错了,请纠正我,但我不认为这应该是那样,也许这是一个错误。