Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
#1

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

29.05.2011, 08:46. Просмотров 4447. Ответов 25
Метки нет (Все метки)

есть такой массив

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Кб, хотя очевидно что он должен быть намного больше

покажите плз пример кода как записать мой массив в дат файл ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2011, 08:46
Ответы с готовыми решениями:

Заполнить динамический массив из файла и записать массив обратно в файл
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из...

Записать исходный и отсортированный динамический массив в файл
Есть динамический массив: #include &lt;iostream&gt; #include &lt;Windows.h&gt;...

Как правильно записать двумерный динамический массив?
Вот есть кусок кода: int n; cout&lt;&lt;&quot;Введите размерность...

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла
задача: передать динамический массив в функцию, и записать в каждый элемент...

Как записать файл в массив?
Добрый день, как записать побитово файл в массив типа int? Возможно ли картинку...

25
Mиxaил
534 / 439 / 162
Регистрация: 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();
0
nill
10 / 10 / 2
Регистрация: 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кб
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
29.05.2011, 12:02 #4
nill, у вас в файл пишутся значения указателей на первые элементы массивов следующего уровня, вот их примерно килобайт и набирается. Вообще интересно, что это за задача, которая аж пятимерных массивов требует? Наверняка что-то перемудрили...
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 12:19  [ТС] #5
easybudda,
так а как всетаки записать тогда ?
я уже смотрю что пишеться всегда одно и тоже как раз похоже на что то типо указателей

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

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

а другой проге которая у меня в виде длл есть трехмерный массив на 63М элементов и все ок и с записью и с инициализацией просто написал int super_mas[795][796][101]={0}; и все ок
почему так ?
в консольных приложениях меньше памяти можно использовать или что ?
0
Kastaneda
Jesus loves me
Эксперт С++
4768 / 2971 / 342
Регистрация: 12.12.2009
Сообщений: 7,532
Записей в блоге: 2
Завершенные тесты: 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];
1
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.05.2011, 12:24 #7
Цитата Сообщение от nill Посмотреть сообщение
если перемножить все пять уровней получается 2868750 то есть всего 2М элементов
уверены? вы запустите диспетчер задач и посмотрите сколько ест памяти, ваш 5-ти мерный массив лочит около 80 мегов памяти и после этого полторы минуты освобождает эту память
0
nill
10 / 10 / 2
Регистрация: 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 мег есть и инициализируеться как обычный массив без всяких заморочек
0
Kastaneda
Jesus loves me
Эксперт С++
4768 / 2971 / 342
Регистрация: 12.12.2009
Сообщений: 7,532
Записей в блоге: 2
Завершенные тесты: 1
29.05.2011, 14:12 #9
Цитата Сообщение от nill Посмотреть сообщение
только опять проблема а как прочитать этот файл в массив
Ну можно записывать в файл через пробелы
C++
1
File_output << massiv_resultatov[a][b][c][d][e]<<" ";
А потом считывать так же, через циклы.
1
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 14:16  [ТС] #10
Kastaneda,
можно пример в коде как считать из файла?
немогу разобраться как и что делать в циклах
0
Kastaneda
Jesus loves me
Эксперт С++
4768 / 2971 / 342
Регистрация: 12.12.2009
Сообщений: 7,532
Записей в блоге: 2
Завершенные тесты: 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];
1
nill
10 / 10 / 2
Регистрация: 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();
вот такой код для записи и чтения
в итоге ничего не читает как будто дат файл пустой
что не так где ошибка?
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:10 #13
C++
1
std::ofstream
Возможно, из-за этого?
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:15  [ТС] #14
diagon,
а что надо написать?
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 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");
Правда в вашем коде оба случая для записи, а не для чтения, как-то не заметил
0
nill
10 / 10 / 2
Регистрация: 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()
такой код вообще не компилиться

можно пример всего кода с циклом а то я так долго буду гадать
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 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();
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:34  [ТС] #18
diagon,
код компилиться но результат тот же массив пустой
с файла ничего не читаеться

то есть файл создаеться потом я делаю только чтение в коде без записи и печатаю массив он пустой
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:38 #19
Для начала неплохо было бы создать и заполнить этот файл=)
Потом считать с него в массив, выполнить нужные преобразования, открыть файл для записи, и вывести туда массив... Вам ведь это нужно?
0
nill
10 / 10 / 2
Регистрация: 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();
Потом считать с него в массив, выполнить нужные преобразования, открыть файл для записи, и вывести туда массив... Вам ведь это нужно?
мне это нужно чтобы в одной проге создать массив записать туда данные и сохранить весь массив в дат файле, а в другой проге открыть этот дат файл и считать все в такой же массив
0
29.05.2011, 15:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2011, 15:59

Записать информацию из файла в динамический массив
Здравствуйте. Пробую из фала записать информацию в двумерную матрица типа char....

Как записать двумерный массив в файл?
Здравствуйте. У меня есть такой код: #include &lt;iostream&gt; using namespace...

Как записать массив структур в файл
Ребят всем привет у меня такой вопрос как мне записать #include &lt;iostream&gt;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru