Почему персонажи застревают в начале моих строк? - PullRequest
2 голосов
/ 23 июля 2010

Я разрабатывал некоторые инструменты для компьютерного зрения с openCV, но каждый раз, когда я передаю строку в функцию openCV, персонажи помечаются в начале. Сначала это просто раздражало, но теперь я пытаюсь использовать инструменты openCV fileStorage, и символы making делают мои имена файлов нечитаемыми.

Примечание: символы добавляются только когда я передаю строки в новые функции openCV в стиле c ++. Если я использую старые функции стиля C, строки получаются хорошими.

Пример: Я ввожу это:

namedWindow("CBImage", 1);
.
.
.
imshow("CBImage", Frame);

Но заголовок окна гласит BCBImage

Я не думаю, что проблема обязательно связана с openCV; Я думаю, что это связано с использованием строк в целом. проверьте эту ссылку, кодер, похоже, испытывает похожую проблему. http://www.sfml -dev.org / форум / viewtopic.php? Т = 1257 & ИСС = 5cfa50b780e47685d1c03296adffa8ed

есть мысли? спасибо


Спасибо всем за помощь. Оригинальное предложение KennyTM решило проблему. Мне пришлось заменить библиотеки cv cvaux cvcore и highgui на отладочные версии (возможно, их придется создавать в зависимости от того, какую версию openCV вы используете, проверьте папку lib в каталоге openCV).

Ответы [ 3 ]

8 голосов
/ 23 июля 2010

Учитывая, что ÌÌÌÌ = 0xCCCCCCCC, кажется, что библиотека не ожидает 4-байтового члена перед строковым членом, например,

// Provided.
struct something {
   ...
   void* some_pointer; // uninitialized variables are filled with 0xCC in debug mode.
   char the_actual_content[1234];
   ...
}

// But the library wants
struct something {
   ...
   char the_actual_content[1234]; // now the 0xCCCCCCC is shifted into this string.
   ...
}

Вы пробовали совет по ссылке?

Не смешивайте конфигурации отладки и выпуска Если вы находитесь в режиме отладки, свяжите библиотеки с суффиксом "-d".

1 голос
/ 23 июля 2010

Что-то читает память, которая не была инициализирована.См. Следующий ответ для получения подробной информации о том, какие отладочные сборки MSVC могут устанавливать неинициализированную или непригодную для использования память в:

0 голосов
/ 23 июля 2010

Вы можете передавать адрес std::string функции, которая ожидает ссылку (не указатель) на std::string, а также имеет версию, которая принимает void*.

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