Я пишу приложение C ++, которое использует dirent.h
библиотека, чтобы читать файлы из каталога. В какой-то момент я хочу сделать выбор между файлами и каталогами. Для этого я добавил следующий фрагмент кода:
entry = readdir(used_directory); //read next object from directory stream
DIR* directory_test = opendir((path + entry->d_name).c_str()); //try to open object as directory
if ( directory_test != nullptr) { //object is directory
if (entry != nullptr) { //reading from directory succeeded
dirs.push_back(entry->d_name); //add filename to file list
++dircounter;
}
}
else { //object is file
path
это тип string
и запись является типом dirent *
,
При этом программа вызывает ошибку доступа к памяти, без нее нет.
Я выяснил, что ошибка вызвана
(path + entry->d_name)
Но это не неявное преобразование в string
в заявлении, потому что другие тесты, такие как cout << entry->d_name;
или же path += entry->d_name
не удалось с той же ошибкой, тоже. Очевидно, что с использованием entry->d_name
как char *
хотя это определяется так (в документации dirent.h).
Почему происходит этот сбой?
РЕДАКТИРОВАТЬ:
Позже в программу добавлю entry->d_name
к vector<string>
, это не вызывает никаких проблем.
Ошибка доступа к записи перед проверкой, если она равна nullptr
,
Потому что мой цикл, проходящий через каталог, останавливается, если запись равна nullptr
Последнее изменение вызывает ошибку.