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

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

Войти
Регистрация
Восстановить пароль
 
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
#1

Выделение динамической памяти для чтения каждой структуры из файла - C++

07.05.2014, 23:06. Просмотров 394. Ответов 9
Метки нет (Все метки)

Здравствуйте! Никак не получается выделить динамическую память под каждую структуру из файла, учитывая, что я не знаю сколько структур в файле. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 23:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение динамической памяти для чтения каждой структуры из файла (C++):

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

Выделение динамической памяти для матрицы - C++
Эта программа преобразует матрицу со случайными числами в матрицу, которая показана на рисунке ниже. Ее нужно переделать так, чтобы...

Выделение динамической памяти для матрицы - C++
Здравствуйте! Подскажите, пожалуйста, что делаю не так..написала программу, которая считывает двумерный массив...с помощью операторов...

Выделение динамической памяти для char - C++
Здравствуйте, возник вопрос: как выделить память для char массива? Вот, что делаю я: #include "stdafx.h" #include<iostream> ...

Выделение динамической памяти для char[n]* - C++
Есть количество цитат (quote), которые должны быть типа char* Есть переменная с колличеством цитат (quoteNum) Вопрос: как выделить...

Выделение динамической памяти для двумерного массива. - C++
#include <iostream> int main() { setlocale( LC_ALL,"Russian" ); int N, M; std::cout << "Введите кол-во строк в массиве:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
07.05.2014, 23:26 #2
Просмотри файл, подсчитай сколько там структур. Выделишь память и при повторном просмотре считаешь.
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
07.05.2014, 23:27  [ТС] #3
так а если файл бинарный
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.05.2014, 01:53 #4
Цитата Сообщение от SlowAR Посмотреть сообщение
так а если файл бинарный
С бинарным проще. Курсор в конец файла, tellg() выдаст количество байт в файле, разделить на размер структуры.
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
08.05.2014, 06:21  [ТС] #5
alsav22, я так делал, но оно пишет, что размер массива должен быть константой
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.05.2014, 06:55 #6
Цитата Сообщение от SlowAR Посмотреть сообщение
я так делал
Вот это делали?
Цитата Сообщение от SlowAR Посмотреть сообщение
Никак не получается выделить динамическую память
Если это делали, то не будет писать:
Цитата Сообщение от SlowAR Посмотреть сообщение
что размер массива должен быть константой
Динамически создавайте массив, и будет вам счастье...
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
08.05.2014, 07:11 #7
А как вы память выделяете? Можно цитату из кода?)
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
08.05.2014, 09:01  [ТС] #8
Praktolock,
C++
1
2
3
4
5
6
7
8
9
10
11
fseek(f1, 0L, SEEK_END);
size = ftell(f1) / sizeof(structura);
fseek(f1, 0L, SEEK_SET);
 
structura *mas[50];   //если тут вместо 50 написать size - будет ошибка
while(! feof(f1))
{
mas[num] = new structura;
fread(mas[num], sizeof(structura), 1, f1);
num++;
}
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
08.05.2014, 09:12 #9
C++
1
structura *mas[50];
И что тут динамического? Это статический массив из 50 указателей.
Вот так динамически:
C++
1
structura *mas=new structura[50];
только delete[] потом незабудь сделать

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
fseek(f1, 0L, SEEK_END);
int size = ftell(f1) / sizeof(structura);
fseek(f1, 0L, SEEK_SET);
 
structura **mas=new structura*[size];   //если тут вместо 50 написать size - будет ошибка
int num=size;
while(feof(f1))
{
mas[num] = new structura;
fread(mas[num], sizeof(structura), 1, f1);
num++;
}
Как-то так должно проканать
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
08.05.2014, 09:22  [ТС] #10
Praktolock, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2014, 09:22
Привет! Вот еще темы с ответами:

Выделение динамической памяти для массива точек - C++
Доброго времени суток. Вот у нас есть структура точка struct point { double x,y; } p;

Выделение и удаление памяти, выделенной для динамической строки - C++
Данная функция производит ввод и собственно контроль ввода (размер массива от 1 до 20, иначе должна выдавать ошибку; при вводе букв также...

Динамическое выделение памяти для структуры в функции - C++
Объясните не могу понять. На С++ пишу совсем недавно. Суть вопроса, при первом запуске программы происходит проверка на существование...

Выделение динамической памяти - C++
Всем доброго времени суток. Прошу помочь с задачей. Задача решена, просто нужно переделать её с выделением динамической памяти. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.05.2014, 09:22
Ответ Создать тему
Опции темы

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