2013-06-18 4 views
1

부스트를 사용하여 파일을 행당 3 개의 부동 소수점 (x, y, z 좌표의 점)이있는 메모리로 매핑하려고합니다. cl_float3 형식 (openCL 용)에 데이터를 저장하려고하는데 작동하지 않는 것 같습니다. 이것은 내 코드입니다 :메모리 매핑 부스트를 사용한 2D 배열

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(); 
} 

데이터 배열을 사용하려고하면 읽기 위반에 대한 액세스 위반 오류가 발생합니다. 어떤 도움이 필요합니까?

+0

정말 "행당 3 개의 플로트"입니까, 아니면 "행당 대략적인 부동 소수점 값을 나타내는 3 ASCII 인코딩 된 문자열"입니까 - 즉 부동 소수점의 2 진 4 바이트 표현 또는 "3.141593"과 같이 사람이 읽을 수있는 텍스트 표현입니까? – twalberg

+0

예 원시 이진 파일을 입력으로 시도했는데 성공했습니다. – shunyo

답변

2

파일을 열 자마자 닫힙니다. 내가 부스트의 메모리 매핑 된 파일에 대한 설명서를 읽지 못했지만 파일을 열어 두어야 할 수도 있습니다.

if (file.is_open()) { 
    data = (cl_float3*) file.data(); 
    file.close(); // remove this line 
} 
+0

잡기에 감사드립니다. 그러나 여전히 데이터 읽기를위한 가비지 값을 제공합니다. – shunyo

+0

파일의 형식은 무엇입니까? 이것은 원시 2 진 부동 소수점 값을 예상합니다. – Wug

+0

ascii (.xyz)/빠른 바이너리 (.fbi)/바이너리 (.bin)와 같은 몇 가지 형식을 시도했습니다. 형식이 원시 바이너리인지 여부는 알지 못하지만 항상 0 또는 가비지 값을 얻고 있습니다. – shunyo