2D-массив с отображением памяти с использованием повышения

Я пытаюсь использовать boost для сопоставления файла с памятью, имеющей 3 числа с плавающей запятой в строке (координаты точек x, y, z). Я пытаюсь сохранить данные в типе cl_float3 (для openCL), но, похоже, это не работает. Это мой код:

cl_float3 *data;
boost::iostreams::mapped_file_source file;
size = 785444;    // size of the file
int numBytes = size*sizeof(cl_float)*3;
file.open(filename,numBytes);
if(file.is_open()) {
    data = (cl_float3*)file.data();
    file.close();
}

Это дает ошибку нарушения доступа для нарушения чтения, когда я пытаюсь использовать массив данных. Любая помощь?


person shunyo    schedule 18.06.2013    source источник
comment
Действительно ли это 3 числа с плавающей запятой на строку или это 3 строки символов в кодировке ASCII, представляющие приблизительное значение с плавающей запятой на строку, то есть это двоичное 4-байтовое представление числа с плавающей запятой или удобочитаемое текстовое представление, например 3.141593?   -  person twalberg    schedule 18.06.2013
comment
Да, я попробовал необработанный двоичный файл в качестве входных данных, и это сработало.   -  person shunyo    schedule 18.06.2013


Ответы (1)


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

if (file.is_open()) {
    data = (cl_float3*) file.data();
    file.close(); // remove this line
}
person Wug    schedule 18.06.2013
comment
Спасибо, что поймали это. Но он по-прежнему дает значения мусора для чтения данных. - person shunyo; 18.06.2013
comment
В каком формате файл? Это ожидает необработанные двоичные значения с плавающей запятой. - person Wug; 18.06.2013
comment
Я пробовал несколько форматов - ascii(.xyz)/fast binary(.fbi)/binary(.bin). Хотя я не знаю, являются ли форматы необработанными двоичными файлами или нет, я всегда получаю либо нули, либо значения мусора. - person shunyo; 18.06.2013
comment
Хорошо, я только что преобразовал в необработанный двоичный файл, и, похоже, он работает нормально. Благодарю вас! - person shunyo; 18.06.2013