Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

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

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

29.05.2011, 08:46. Просмотров 3954. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как записать динамический массив в файл (C++):

Заполнить динамический массив из файла и записать массив обратно в файл - C++
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из файла и обратную которая этот массив запишет в файл=)

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

Как правильно записать двумерный динамический массив? - C++
Вот есть кусок кода: int n; cout&lt;&lt;&quot;Введите размерность матрицы: &quot;&lt;&lt;endl; cin&gt;&gt;n; int *c=new int; ...

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

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

Записать информацию из файла в динамический массив - C++
Здравствуйте. Пробую из фала записать информацию в двумерную матрица типа char. Но у меня ничего не получается, скорее всего так просто...

25
Mиxaил
533 / 438 / 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();
0
nill
10 / 10 / 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кб
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
29.05.2011, 12:02 #4
nill, у вас в файл пишутся значения указателей на первые элементы массивов следующего уровня, вот их примерно килобайт и набирается. Вообще интересно, что это за задача, которая аж пятимерных массивов требует? Наверняка что-то перемудрили...
0
nill
10 / 10 / 0
Регистрация: 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
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 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
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.05.2011, 12:24 #7
Цитата Сообщение от nill Посмотреть сообщение
если перемножить все пять уровней получается 2868750 то есть всего 2М элементов
уверены? вы запустите диспетчер задач и посмотрите сколько ест памяти, ваш 5-ти мерный массив лочит около 80 мегов памяти и после этого полторы минуты освобождает эту память
0
nill
10 / 10 / 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 мег есть и инициализируеться как обычный массив без всяких заморочек
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
29.05.2011, 14:12 #9
Цитата Сообщение от nill Посмотреть сообщение
только опять проблема а как прочитать этот файл в массив
Ну можно записывать в файл через пробелы
C++
1
File_output << massiv_resultatov[a][b][c][d][e]<<" ";
А потом считывать так же, через циклы.
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 14:16  [ТС] #10
Kastaneda,
можно пример в коде как считать из файла?
немогу разобраться как и что делать в циклах
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 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 / 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();
вот такой код для записи и чтения
в итоге ничего не читает как будто дат файл пустой
что не так где ошибка?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.05.2011, 15:10 #13
C++
1
std::ofstream
Возможно, из-за этого?
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
29.05.2011, 15:15  [ТС] #14
diagon,
а что надо написать?
0
diagon
Higher
1930 / 1196 / 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");
Правда в вашем коде оба случая для записи, а не для чтения, как-то не заметил
0
29.05.2011, 15:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2011, 15:18
Привет! Вот еще темы с ответами:

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

Как в файл записать массив из чисел в с++? - C++
помогите пожалуйста,кто знает например , есть у нас текстовый файл &quot; file.txt&quot; . в него нужно поместить массив из 5 чисел . как это...

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

Подскажите как записать массив структур в файл - C++
Написал програмку, которая копирует желаемый прямоугольник(массив символов с атрибутами) в указанное место на экарн. Программа работает...


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

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

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