Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2011, 19:24   #1
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

На самом деле вы сами себе противоречите. С одной стороны, вы заявляете, что не хотите объявлять массив, так как можете использовать меньше, чем 1000 структур. С другой стороны вы на самом деле пытаетесь выделить память именно под 1000 структур. Так что на мой взгляд при таком подходе лучше все же объявить массив, причем статический массив, чтобы не забивать им стек.

Во-вторыХ. не надо задавать участникам форума загадки! Если ваш компилятор выдал ошибку, то приведите текст ошибки. Это ускорит получение грамотного ответа на ваш вопрос.

Что касается второго вашего вопроса, то вы в результате имеете указатель на первый элемент массива структур, выделенных в памяти. Причем все эти ваши структуры неинициализированы, так как вы не предоставили для них конструктор.

Чтобы получить доступ к n-ому элементу структуры, можно использовать синтаксис обращения к элементу массива, то есть

l[n].id[0] - это обращение к 0 индексу n-ной структуры.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 15.07.2011, 19:24   #2
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

На самом деле вы сами себе противоречите. С одной стороны, вы заявляете, что не хотите объявлять массив, так как можете использовать меньше, чем 1000 структур. С другой стороны вы на самом деле пытаетесь выделить память именно под 1000 структур. Так что на мой взгляд при таком подходе лучше все же объявить массив, причем статический массив, чтобы не забивать им стек.

Во-вторыХ. не надо задавать участникам форума загадки! Если ваш компилятор выдал ошибку, то приведите текст ошибки. Это ускорит получение грамотного ответа на ваш вопрос.

Что касается второго вашего вопроса, то вы в результате имеете указатель на первый элемент массива структур, выделенных в памяти. Причем все эти ваши структуры неинициализированы, так как вы не предоставили для них конструктор.

Чтобы получить доступ к n-ому элементу структуры, можно использовать синтаксис обращения к элементу массива, то есть

l[n].id[0] - это обращение к 0 индексу n-ной структуры.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 15.07.2011, 20:20   #3
Алексей Емеля
Пользователь
 
Аватар для Алексей Емеля
 
Регистрация: 13.06.2011
Сообщений: 23
По умолчанию Массив динамических структур. Проблема с выделением памяти.

Программа - база данных библиотеки и абонентов. Две связанные id структуры. Поскольку если создавать массив структур, то неизвестно сколько будет максимальное количество книг поэтому лучше сделать динамический массив структур. Граница - 1000 структур. Попробовал так сделать но компилятор выдает ошибку. В чем она?

Код:
#include<iostream>
using namespace std;

struct library {
	int *id[5];	// ID
	char autor_family[15];	// Фамилия автора
	char autor_name[15];	// Имя автора
	char title[10];		// Название книги
	char state[5];	// Состояние
};

struct sub {
	int id[5];	// ID абонента
	int book_id[5];	// ID книг
	char family[15];	// Фамилия абонента
	char name[15];		// Имя абонента
	int date[8];	// Даты взятия книг
};

int main() {
	int *l;
	int *s;
	l = new library(1000);
	s = new sub(1000);
	return 0;
}
Дорога в тысячу миль начинается с одного шага.
Алексей Емеля вне форума Ответить с цитированием
Старый 15.07.2011, 20:32   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

library(1000) - это выглядит как попытка вызова несуществующего конструктора library(int).
Надо бы такl = new library[1000];
EUGY вне форума Ответить с цитированием
Старый 15.07.2011, 20:39   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот-вот...и ТС глянь сюда ==> Ссылка
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 15.07.2011, 20:47   #6
Алексей Емеля
Пользователь
 
Аватар для Алексей Емеля
 
Регистрация: 13.06.2011
Сообщений: 23
По умолчанию

Первую ошибку исправил, а теперь подскажите пожалуйста как получить доступ к id первой структуры? К примеру как присвоить id первой структуры значение равное 12?
Дорога в тысячу миль начинается с одного шага.
Алексей Емеля вне форума Ответить с цитированием
Старый 15.07.2011, 20:51   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Как-то так...
Код:
	int id[5];	// ID
Код:
	l[0].id[1] = 101;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос выделением памяти Tiro Общие вопросы C/C++ 5 13.06.2009 16:46
Проблемы с выделением динамической памяти malloc (recalloc) slips Общие вопросы C/C++ 6 29.04.2009 19:27
Создание и использование динамических структур Oksana11 Помощь студентам 5 09.01.2008 19:39