powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка: пишу / читаю данные бинарным файлом
2 сообщений из 2, страница 1 из 1
Ошибка: пишу / читаю данные бинарным файлом
    #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
Ошибка: пишу / читаю данные бинарным файлом
    #39623474
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, ошибка найдена!
Дело в том, что мой массив Data это УЖЕ указатель, поэтому строчку
Код: plaintext
1.
File.read((char*) &Data, Quantity * sizeof(Type));



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


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