Форум программистов, компьютерный форум CyberForum.ru

Как записать динамический массив в файл - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.78
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 08:46     Как записать динамический массив в файл #1
есть такой массив

CSS
1
2
3
4
5
    double *****massiv_resultatov = new double****[25];
    for(i = 0; i < 25; i++) massiv_resultatov[i] = new double***[15];
    for(i = 0; i < 25; i++) for(j = 0; j < 15; j++) massiv_resultatov[i][j] = new double**[15];
    for(i = 0; i < 25; i++) for(j = 0; j < 15; j++) for(k = 0; k < 15; k++) massiv_resultatov[i][j][k] = new double*[170];
    for(i = 0; i < 25; i++) for(j = 0; j < 15; j++) for(k = 0; k < 15; k++) for(g = 0; g < 170; g++)massiv_resultatov[i][j][k][g] = new double[3];
пробую его записать так

C++
1
2
3
FILE * fout = fopen("massiv_resultatov.dat", "wb");
fwrite(massiv_resultatov, sizeof(massiv_resultatov), 1, fout);  // big write, but quick
fclose(fout);
Но ничего не пишеться
Все компилируеться и выполняеться без ошибок, а в результате получаю файл на 1Кб, хотя очевидно что он должен быть намного больше

покажите плз пример кода как записать мой массив в дат файл ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
29.05.2011, 11:01     Как записать динамический массив в файл #2
C++
1
2
3
4
std::ofstream File_output ( "output.txt", std::ofstream::out);
for ( int index = 0; index < 25; index++ )
    File_output << mas [ index ];
File_output.close();
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 11:34  [ТС]     Как записать динамический массив в файл #3
C++
1
2
3
4
std::ofstream File_output ( "massiv_def_vesov.dat", std::ofstream::out);
for ( int index = 0; index < 25; index++ )
File_output << massiv_resultatov[ index ];
File_output.close();
сделал так результат такой же как и у меня пишеться файл размером 1кб
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.05.2011, 12:02     Как записать динамический массив в файл #4
nill, у вас в файл пишутся значения указателей на первые элементы массивов следующего уровня, вот их примерно килобайт и набирается. Вообще интересно, что это за задача, которая аж пятимерных массивов требует? Наверняка что-то перемудрили...
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 12:19  [ТС]     Как записать динамический массив в файл #5
easybudda,
так а как всетаки записать тогда ?
я уже смотрю что пишеться всегда одно и тоже как раз похоже на что то типо указателей

с пятимерным массивом не перемудрил может быть только количество элементов в первых трех уровнях можно сократить а все остальное нет

Добавлено через 8 минут
И еще такой вопрос вот этот массив у меня в консольном приложении Win32
если перемножить все пять уровней получается 2868750 то есть всего 2М элементов

а другой проге которая у меня в виде длл есть трехмерный массив на 63М элементов и все ок и с записью и с инициализацией просто написал int super_mas[795][796][101]={0}; и все ок
почему так ?
в консольных приложениях меньше памяти можно использовать или что ?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.05.2011, 12:24     Как записать динамический массив в файл #6
Цитата Сообщение от nill Посмотреть сообщение
так а как всетаки записать тогда ?
Можно через циклы
C++
1
2
3
4
5
6
for(int a=0;a<size;a++)
   for(int b=0;b<size;b++)
      for(int c=0;c<size;c++)
         for(int d=0;d<size;d++)
            for(int e=0;e<size;e++)
              File_output << massiv_resultatov[a][b][c][d][e];
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.05.2011, 12:24     Как записать динамический массив в файл #7
Цитата Сообщение от nill Посмотреть сообщение
если перемножить все пять уровней получается 2868750 то есть всего 2М элементов
уверены? вы запустите диспетчер задач и посмотрите сколько ест памяти, ваш 5-ти мерный массив лочит около 80 мегов памяти и после этого полторы минуты освобождает эту память
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 13:43  [ТС]     Как записать динамический массив в файл #8
Kastaneda,
спасибо вроде записалось но я думал будет 75 мег как он и ест в оперативе а файл получился 36 мег всего

только опять проблема а как прочитать этот файл в массив
раньше был такой код для обыяного массива

C++
1
2
3
4
memset(massiv_resultatov, 0, sizeof(massiv_resultatov));
FILE * fin10 = fopen("massiv_def_vesov.dat", "rb");
size_t bytesread10 = fread(massiv_resultatov, sizeof(massiv_resultatov), 1, fin10); 
fclose(fin10);
но для динамического он не подходит

Maxwe11,
все правильно 75 мег он есть, а тот большой на 63М около 200 мег есть и инициализируеться как обычный массив без всяких заморочек
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.05.2011, 14:12     Как записать динамический массив в файл #9
Цитата Сообщение от nill Посмотреть сообщение
только опять проблема а как прочитать этот файл в массив
Ну можно записывать в файл через пробелы
C++
1
File_output << massiv_resultatov[a][b][c][d][e]<<" ";
А потом считывать так же, через циклы.
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 14:16  [ТС]     Как записать динамический массив в файл #10
Kastaneda,
можно пример в коде как считать из файла?
немогу разобраться как и что делать в циклах
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.05.2011, 14:17     Как записать динамический массив в файл #11
Так аналогично же:
C++
1
2
3
4
5
6
for(int a=0;a<size;a++)
   for(int b=0;b<size;b++)
      for(int c=0;c<size;c++)
         for(int d=0;d<size;d++)
            for(int e=0;e<size;e++)
              File_input >>massiv_resultatov[a][b][c][d][e];
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:06  [ТС]     Как записать динамический массив в файл #12
Kastaneda,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::ofstream File_output ( "massiv_def_vesov.dat", std::ofstream::out);
for(int a=0;a<25;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<170;d++)
for(int e=0;e<3;e++)
File_output << massiv_resultatov[a][b][c][d][e];
File_output.close();
 
std::ofstream File_input ( "massiv_def_vesov.dat", std::ofstream::in);
for(int a=0;a<25;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<170;d++)
for(int e=0;e<3;e++)
File_input << massiv_resultatov[a][b][c][d][e]; 
File_input.close();
вот такой код для записи и чтения
в итоге ничего не читает как будто дат файл пустой
что не так где ошибка?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:10     Как записать динамический массив в файл #13
C++
1
std::ofstream
Возможно, из-за этого?
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:15  [ТС]     Как записать динамический массив в файл #14
diagon,
а что надо написать?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:18     Как записать динамический массив в файл #15
По логике так
C++
1
2
3
std::ifstream File_input("massiv_def_vesov.dat");
 
std::ofstream File_output("massiv_def_vesov.dat");
Правда в вашем коде оба случая для записи, а не для чтения, как-то не заметил
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:21  [ТС]     Как записать динамический массив в файл #16
diagon,

C++
1
2
3
4
5
6
7
8
std::ifstream  File_input ( "massiv_def_vesov.dat", std::ifstream::in);
for(int a=0;a<25;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<170;d++)
for(int e=0;e<3;e++)
File_input << massiv_resultatov[a][b][c][d][e]; 
File_input.close()
такой код вообще не компилиться

можно пример всего кода с циклом а то я так долго буду гадать
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:23     Как записать динамический массив в файл #17
Хм... зачем там писать
C++
1
 std::ifstream::in
Если я не ошибаюсь, ввод-вывод будут такими
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::ifstream File_input( "massiv_def_vesov.dat");
for(int a=0;a<25;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<170;d++)
for(int e=0;e<3;e++)
File_input >> massiv_resultatov[a][b][c][d][e]; 
File_input.close();
 
std::ofstream File_output( "massiv_def_vesov.dat");
for(int a=0;a<25;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<170;d++)
for(int e=0;e<3;e++)
File_output << massiv_resultatov[a][b][c][d][e];
File_output.close();
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:34  [ТС]     Как записать динамический массив в файл #18
diagon,
код компилиться но результат тот же массив пустой
с файла ничего не читаеться

то есть файл создаеться потом я делаю только чтение в коде без записи и печатаю массив он пустой
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:38     Как записать динамический массив в файл #19
Для начала неплохо было бы создать и заполнить этот файл=)
Потом считать с него в массив, выполнить нужные преобразования, открыть файл для записи, и вывести туда массив... Вам ведь это нужно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2011, 15:59     Как записать динамический массив в файл
Еще ссылки по теме:

C++ Файл: Из текстового файла найти max и min элемент и записать в другой текстовой файл, не используя массив
Как записать массив структур в файл C++
Записать исходный и отсортированный динамический массив в файл C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:59  [ТС]     Как записать динамический массив в файл #20
ну так вот же мы создаем и записываем все в файл разве нет?
C++
1
2
3
4
5
6
7
8
std::ifstream File_input( "massiv_def_vesov.dat");
for(int a=0;a<25;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<170;d++)
for(int e=0;e<3;e++)
File_input >> massiv_resultatov[a][b][c][d][e]; 
File_input.close();
Потом считать с него в массив, выполнить нужные преобразования, открыть файл для записи, и вывести туда массив... Вам ведь это нужно?
мне это нужно чтобы в одной проге создать массив записать туда данные и сохранить весь массив в дат файле, а в другой проге открыть этот дат файл и считать все в такой же массив
Yandex
Объявления
29.05.2011, 15:59     Как записать динамический массив в файл
Ответ Создать тему
Опции темы

Текущее время: 00:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru