Использование широких символов, приводящих к исключениям доступа к памяти в RAD Studio C ++ Builder

Поэтому я играл с символами и широкими символами в основной программе, которая рекурсивно сканирует каталоги в Windows. Первоначально я использовал стандартные символы и строки, а также некоторые связанные функции для выполнения этой задачи (FindFirstFile, FindNextFile и т. Д.). Фактическая рекурсия передается созданному потоку через CreateThread и WaitForSingleObject; который работал совершенно нормально и, как и ожидалось.

Однако возникла проблема, когда я преобразовал эти символы, строки и связанные с ними функции в их широкие аналоги (wchar_t, wstring, FindFirstFileW и т. Д.). Теперь программа выдает исключение при рекурсивном сканировании каталогов с более чем небольшим количеством папок / файлы. Исключение происходит во время фазы WaitForSingleObject обработки моего потока. я имею выследил следующую информацию на самом исключении:

EAccessViolation класс исключений для недопустимого доступа к памяти
ошибки.

EAccessViolation возникает, когда приложение:

Разыменовывает указатель nil (Delphi) или NULL (C ++).

Записывает в память, зарезервированную для исполняемого кода.

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

Информация об исключительной ситуации во время выполнения сохраняется в полях, предоставленных
EExternal.

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

Мой вопрос: с какой стати это исключение выдается, когда единственное, что я изменил, это тип используемых символов? Я использую IDE RAD Studio XE3 C ++ Builder, и, к сожалению, я не могу действительно протестировать это в одной из моих других IDE без внесения существенных изменений в код.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …