바이너리 파일에 잘못 쓰고 있다고 생각합니다. 학년, 단위 등의 세부 정보가있는 목록에 대학 과정을 추가 할 수있는 프로그램을 만들어야합니다. 배열에 항목을 추가 할 때마다 배열 용량을 배가해야합니다 (따라서 doubleArrayCapacity 함수)C++ 동적 배열 직렬화
void doubleArrayCapacity(Course*&, int&, int);
...
int cap = 2;
int size = 0;
Course* courses = new Course[cap];
fstream fin;
fin.open("myCollegeCourses.9.bat", ios::binary|ios::in);
if (fin.good())
{
fin.read(reinterpret_cast<char*>(&size), sizeof(size));
doubleArrayCapacity(courses, cap, size);
fin.read(reinterpret_cast<char*>(courses), cap * sizeof(Course));
}
fin.close();
...
fstream fout;
fout.open("myCollegeCourses.9.bat", ios::binary|ios::out);
fout.write(reinterpret_cast<char*>(&size), sizeof(size));
fout.write(reinterpret_cast<char*>(courses), cap * sizeof(Course));
fout.close();
...
void doubleArrayCapacity(Course*& array, int& capacity, int newCapacity)
{
Course* temp = new Course[2 * capacity];
for (int i = 0; i < capacity; i++)
temp[i] = array[i];
delete [ ] array;
array = temp;
capacity = newCapacity * 2;
}
내 배열에 4 개의 항목을 추가하면 프로그램이 올바르게 작동합니다. 5 개의 객체를 얻으면 오류가 발생합니다. 파일을 올바르게 다시 읽지 않고 다섯 번째 항목을 null 또는 0으로 읽습니다. 내 바이너리 파일에 내 데이터를 제대로 출력하지 않는 것 같습니다. 누구든지 내가 뭘 잘못하고 있는지 알 수 있니?
는 일반적으로 만 두 배 용량,하지 때마다 당신이 항목을 추가합니다. 매번 크기를 두 배로 늘리면 배열에 초기화되지 않은 데이터가 효과적으로 삽입됩니다. – Meixner
BTW :이 데이터를 디스크에 쓰는 것은 번호가 다른 표현 (큰 리틀 엔디안 대 리틀 엔디안)을 가질 수 있고 데이터 유형의 정렬이 구조에 다른 패딩으로 이어지는 다양한 요구 사항을 가질 수 있으므로 다른 플랫폼에서 전혀 이식 가능하지 않습니다. – Meixner