Неверный Ptr при передаче ссылки на строку в качестве аргумента - PullRequest
3 голосов
/ 08 июня 2011

Я пытался понять, почему следующий код дает мне неверный указатель на строку 'filename':

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

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

Я отлаживал пошагово и все, что у меня естьбыло то, что до ввода imread, строка была в порядке (я был в состоянии проверить каждый ее элемент), но впоследствии это было невозможно, и отладчик обвинил Bad Ptr.Я не уверен, что понимаю, почему это происходит.

Просто чтобы вы знали, я использую Visual Studio 2008 и OpenCV 2.2.

РЕДАКТИРОВАТЬ: я действительно забыл сказать одну важную вещь, это было важно для меня, чтобы решить эту проблему: я писал этот код в файле .cu, поэтому сначала компилировал nvcc.

Ответы [ 2 ]

4 голосов
/ 08 июня 2011

Написание отладчиков для нативного кода - нетривиальная задача. Нет соответствия 1: 1 машинного кода исходному коду. Обычно отладчики дают такую ​​вводящую в заблуждение информацию, но это не значит, что действительное значение недействительно. Также убедитесь, что вы компилируете с включенной отладочной информацией и отключенной оптимизацией.

Примечание: когда вы входите в функцию, стековый фрейм может еще не инициализироваться. Выполнение еще одного шага может показать правильные параметры.

0 голосов
/ 10 июня 2011

Я решил эту проблему, отделив в разных файлах весь код OpenCV от кода, который содержал расширение CUDA.Поэтому теперь imread вызывался из файла .cpp, и все, что касалось CUDA, было в разных файлах .cu и .h.

Поправьте меня, если я ошибаюсь, но я не думаю, что это предполагаетсябыть таким, может быть, это ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...