Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка: пишу / читаю данные бинарным файлом / 2 сообщений из 2, страница 1 из 1
30.03.2018, 16:55
    #39623464
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка: пишу / читаю данные бинарным файлом
Написал процедуру, которая пишет мой умный массив на диск. В этом объекте есть как вспомогательные переменные (аллокатор CurrentAllocator и количество элементов Quantity), так и сам массив Data:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
void WriteAllocatorToBinFile(std::ofstream& File, const string& NameFile)
        {
            //remind quantity of data
            File.write((char*) &InitialMemorySize, sizeof(uint32));
            File.write((char*) &Strategy, sizeof(StrategyAllocationMemory));
            File.write((char*) &StepGrowMemory, sizeof(uint32));
            File.write((char*) &PercentGrowArray, sizeof(uint32));
        }

        void WriteArrayToBinFile(const string& NameFile) const
        {
            std::ofstream File;

            //open file for write
            OpenBinFileForWrite(&File, NameFile);

            CurrentAllocator->WriteAllocatorToBinFile(File, NameFile);

            File.write((char*) &Quantity, sizeof(uint32));
            File.write((char*) Data, Quantity * sizeof(Type));

            //close file
            CloseFileForWrite(&File, NameFile);
        }



А потом читаем объект с диска:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
        void ReadAllocatorFromBinFile(std::ifstream& File, const string& NameFile)
        {
            //read quantity data
            File.read((char*) &InitialMemorySize, sizeof(uint32));
            File.read((char*) &Strategy, sizeof(StrategyAllocationMemory));
            File.read((char*) &StepGrowMemory, sizeof(uint32));
            File.read((char*) &PercentGrowArray, sizeof(uint32));
        }

Type* AllocationMemory() const
        {
            Type* Array = (Type*) malloc(InitialMemorySize * sizeof(Type));

            return Array;
        }

void ReadArrayFromBinFile(const string& NameFile)
        {
            std::ifstream File;

            //open file for write
            OpenBinFileForRead(&File, NameFile);

            CurrentAllocator = new Allocator<Type>;
            CurrentAllocator->ReadAllocatorFromBinFile(File, NameFile);

            //know the quantity and allocate the necessary memory
            File.read((char*) &Quantity, sizeof(uint32));
            MemorySize = Quantity;

            CurrentAllocator->SetInitialMemorySize(MemorySize);
            Data = CurrentAllocator->AllocationMemory();

            //read data in memory
            File.read((char*) &Data, Quantity * sizeof(Type)); // ТУТ МЕНЯЕТСЯ ЗНАЧЕНИЕ У ПОЛЯ Quantity !!!

            //close file
            CloseFileForRead(&File, NameFile);
        }



Но почему- то при чтении самого массива с диска у меня меняется значение поля Quantity. Что я не так делаю?
...
Рейтинг: 0 / 0
30.03.2018, 17:01
    #39623474
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка: пишу / читаю данные бинарным файлом
Всем спасибо, ошибка найдена!
Дело в том, что мой массив Data это УЖЕ указатель, поэтому строчку
Код: plaintext
1.
File.read((char*) &Data, Quantity * sizeof(Type));



надо переписать так:
Код: plaintext
1.
File.read((char*) Data, Quantity * sizeof(Type)); 
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка: пишу / читаю данные бинарным файлом / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]