Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с программированием
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Romanello
Пишу на СИ.

есть структура

typedef struct {

char pole1;
char pole2;
int pole3;

} STRUKTURA1;

typedef struct{
*STRUKTURA1;
}STRUKTURA2;

...

гдето хоту заполнять структуру 2

STRUCTURA2 STR;

STR[0].pole=1;
STR[1].pole=2;

Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом?
zltigo
Цитата(Romanello @ Sep 3 2008, 19:31) *
Вот так...

Так вот..
1. позвольте не поверить, что этот код "вылетает" - этот бред не может быть вообще скомпилирован sad.gif
Цитата
Пишу на СИ.

2. Умоляю, почитайте учебник.
3. Вы хоть поняли, что хотели написать? Я вообше ничего не понимяю, что это sad.gif могло-бы значить.
Moderator:
4. Помещение такого поста в раздел "Системный уровень проектирования" ни в какие ворота не лезет - перенес.
rezident
Цитата(Romanello @ Sep 3 2008, 23:31) *
Пишу на СИ.
За еду biggrin.gif
Не обращайте внимания. Шутка.
Цитата(Romanello @ Sep 3 2008, 23:31) *
есть структура
...
Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом?
А что вы хотите получить с помощью этих структур? Смысл какой? Попробуйте поставить себя на место компилятора, "развернуть" эти структуры и посмотреть, что из этого получается. По-моему что-то несуразное laughing.gif Компилятор вообще ругаться по-черному должен.
Romanello
Действительно не так написал.

typedef struct {

char pole1;
char pole2;
int pole3;

} STRUKTURA1;

typedef struct{
STRUKTURA1 *Pole4 ;
}STRUKTURA2;

...

гдето хоту заполнять структуру 2

int main (void){



объявляю переменную
STRUCTURA2 STR;

STR.pole4[0].pole1=1;
STR.pole4[1].pole1=2;

Теперь понятно что я хотел сделать? но по прежнему не понятно как выделить память под STR.
rezident
Цитата(Romanello @ Sep 4 2008, 14:31) *
Теперь понятно что я хотел сделать? но по прежнему не понятно как выделить память под STR.
Совершенно непонятно. Для того чтобы структуру заполнить, нужно ее объявить. Вы же объявили только структуру STR, типа STRUCTURA2, состоящую из одной переменной указателя на структуру типа STRUKTURA1. А где объявление самой структуры типа STRUKTURA1 и где инициализация указателя адресом этой структуры? twak.gif Вы тогда уж словами опишите чего вам хочется. Потому, что на языке Си описание вашей "хотелки" никак не получается. sad.gif
Sat360
Может имелось в виду что-то вроде:

typedef struct {
char pole1;
char pole2;
int pole3;
} STRUCTURA1;

typedef struct {
STRUCTURA1 *Pole4 ;
} STRUCTURA2;

...

{
STRUCTURA2 STR;
STR.Pole4 = new STRUCTURA1[10]; //Get memory for pole4
STR.Pole4[0].pole1 = 1;
}

???

Или:

...
{
STRUCTURA2* STR;
STR = new STRUCTURA2;
STR->Pole4 = new STRUCTURA1[10];
STR->Pole4[0].pole1 = 1;
}

ЗЫ не забудь освободить память.
Neural
давно это было..

не стоит использовать new()..
если бы у вас был бы хотя бы примитивный графический интрефейс..
там бы понадобилось КУЧА и управления ею..

можно сделать так:
------------------------------------------------
typedef struct {
char pole1;
char pole2;
int pole3;
} STRUKTURA1;

typedef struct{
STRUKTURA1 *Pole4 ;
}STRUKTURA2;

char prostranstvo1[sizeof(STRUCTURA1)*2]; // 2 - pole4[0] и pole4[1]
main() {
STRUCTURA2 STR;
STR.pole4 = prostranstvo1;
STR.pole4[0].pole1 = 1;
STR.pole4[1].pole1 = 2;
}
------------------------------------------------
sergeeff
По-моему так более внятно:

Код
typedef struct {
  char pole1;
  char pole2;
  int pole3;
}STRUKTURA1;

typedef struct{
  STRUKTURA1 *pole4;
}STRUKTURA2;

int main(void)
{
   STRUKTURA2 STR;
   STRUKTURA1 prostranstvo1[10];
   STR.pole4 = (STRUKTURA1 *)prostranstvo1;
   STR.pole4[0].pole1 = 1;
   STR.pole4[1].pole1 = 2;
   return 1;
}
Neural
Цитата(sergeeff @ Sep 10 2008, 17:26) *
По-моему так более внятно:

Код
typedef struct {
  char pole1;
  char pole2;
  int pole3;
}STRUKTURA1;

typedef struct{
  STRUKTURA1 *pole4;
}STRUKTURA2;

int main(void)
{
   STRUKTURA2 STR;
   STRUKTURA1 prostranstvo1[10];
   STR.pole4 = (STRUKTURA1 *)prostranstvo1;
   STR.pole4[0].pole1 = 1;
   STR.pole4[1].pole1 = 2;
   return 1;
}


STRUKTURA1 prostranstvo1[2]; я бы поставил перед main()

STR.pole4 = prostranstvo1; // не думаю, что копилятор будет ругаться

перегрузить глобальный new()
void* new(int count) {
return (void*)prostranstvo1;
}
STR.pole4 = new STRUKTURA1[2];

а вообще, чтобы не заморачиваться c кучей
typedef struct{
STRUKTURA1 pole4[2];
}STRUKTURA2;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.