Перейти к содержанию
    

Помогите с программированием

Пишу на СИ.

 

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

 

typedef struct {

 

char pole1;

char pole2;

int pole3;

 

} STRUKTURA1;

 

typedef struct{

*STRUKTURA1;

}STRUKTURA2;

 

...

 

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

 

STRUCTURA2 STR;

 

STR[0].pole=1;

STR[1].pole=2;

 

Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так...

Так вот..

1. позвольте не поверить, что этот код "вылетает" - этот бред не может быть вообще скомпилирован :(

Пишу на СИ.

2. Умоляю, почитайте учебник.

3. Вы хоть поняли, что хотели написать? Я вообше ничего не понимяю, что это :( могло-бы значить.

Moderator:

4. Помещение такого поста в раздел "Системный уровень проектирования" ни в какие ворота не лезет - перенес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишу на СИ.
За еду :biggrin:

Не обращайте внимания. Шутка.

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

...

Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом?

А что вы хотите получить с помощью этих структур? Смысл какой? Попробуйте поставить себя на место компилятора, "развернуть" эти структуры и посмотреть, что из этого получается. По-моему что-то несуразное :laughing: Компилятор вообще ругаться по-черному должен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно не так написал.

 

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь понятно что я хотел сделать? но по прежнему не понятно как выделить память под STR.
Совершенно непонятно. Для того чтобы структуру заполнить, нужно ее объявить. Вы же объявили только структуру STR, типа STRUCTURA2, состоящую из одной переменной указателя на структуру типа STRUKTURA1. А где объявление самой структуры типа STRUKTURA1 и где инициализация указателя адресом этой структуры? :twak: Вы тогда уж словами опишите чего вам хочется. Потому, что на языке Си описание вашей "хотелки" никак не получается. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может имелось в виду что-то вроде:

 

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;

}

 

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

Изменено пользователем Sat360

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

давно это было..

 

не стоит использовать 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;

}

------------------------------------------------

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-моему так более внятно:

 

 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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-моему так более внятно:

 

 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...