Std::ifstream::read вызывает сбой приложения [закрыто] ⇐ C++
-
Anonymous
Std::ifstream::read вызывает сбой приложения [закрыто]
На SoC Xilinx Ultrascale+ я хочу использовать процессор Cortex-a53 для копирования двоичных данных из файла на SD-карте в назначенное пространство памяти в оперативной памяти с помощью ifstream.
Я сопоставляю виртуальное адресное пространство с помощью mmap:
// Сопоставляем целевую память int memfd = open("/dev/mem", O_RDWR | O_SYNC); void* dest_mem = mmap(0, map_size, PROT_READ | PROT_WRITE, MAP_SHARED, memfd, device_base & ~map_mask); закрыть (мемфд); Затем я выполняю копирование, что приводит к сбою моего приложения:
// Копируем данные с SD-карты в ОЗУ std::ifstream binFile(filePath, std::ios::binary); binFile.read(reinterpret_cast(dest_mem), num_bytes); // Эта строка вызывает сбой! Если вместо этого я читаю данные во временный буфер, а затем копирую их в целевой пункт назначения, все работает нормально:
// Копируем данные с SD-карты в ОЗУ, используя временный буфер std::ifstream binFile(filePath, std::ios::binary); буфер символов [число_байт]; binFile.read(reinterpret_cast(&buffer), num_bytes); // Это отлично работает std::memcpy((void*)dest_mem, (void*)&buffer, num_bytes); // Это тоже отлично работает Почему первый подход приводит к сбою приложения?
На SoC Xilinx Ultrascale+ я хочу использовать процессор Cortex-a53 для копирования двоичных данных из файла на SD-карте в назначенное пространство памяти в оперативной памяти с помощью ifstream.
Я сопоставляю виртуальное адресное пространство с помощью mmap:
// Сопоставляем целевую память int memfd = open("/dev/mem", O_RDWR | O_SYNC); void* dest_mem = mmap(0, map_size, PROT_READ | PROT_WRITE, MAP_SHARED, memfd, device_base & ~map_mask); закрыть (мемфд); Затем я выполняю копирование, что приводит к сбою моего приложения:
// Копируем данные с SD-карты в ОЗУ std::ifstream binFile(filePath, std::ios::binary); binFile.read(reinterpret_cast(dest_mem), num_bytes); // Эта строка вызывает сбой! Если вместо этого я читаю данные во временный буфер, а затем копирую их в целевой пункт назначения, все работает нормально:
// Копируем данные с SD-карты в ОЗУ, используя временный буфер std::ifstream binFile(filePath, std::ios::binary); буфер символов [число_байт]; binFile.read(reinterpret_cast(&buffer), num_bytes); // Это отлично работает std::memcpy((void*)dest_mem, (void*)&buffer, num_bytes); // Это тоже отлично работает Почему первый подход приводит к сбою приложения?
Мобильная версия