реклама на сайте
подробности

 
 
> Помогите с программированием
Romanello
сообщение Sep 3 2008, 17:31
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 10-03-05
Пользователь №: 3 204



Пишу на СИ.

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

typedef struct {

char pole1;
char pole2;
int pole3;

} STRUKTURA1;

typedef struct{
*STRUKTURA1;
}STRUKTURA2;

...

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

STRUCTURA2 STR;

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

Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
zltigo
сообщение Sep 3 2008, 17:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Romanello @ Sep 3 2008, 19:31) *
Вот так...

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

2. Умоляю, почитайте учебник.
3. Вы хоть поняли, что хотели написать? Я вообше ничего не понимяю, что это sad.gif могло-бы значить.
Moderator:
4. Помещение такого поста в раздел "Системный уровень проектирования" ни в какие ворота не лезет - перенес.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 3 2008, 17:59
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Romanello @ Sep 3 2008, 23:31) *
Пишу на СИ.
За еду biggrin.gif
Не обращайте внимания. Шутка.
Цитата(Romanello @ Sep 3 2008, 23:31) *
есть структура
...
Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом?
А что вы хотите получить с помощью этих структур? Смысл какой? Попробуйте поставить себя на место компилятора, "развернуть" эти структуры и посмотреть, что из этого получается. По-моему что-то несуразное laughing.gif Компилятор вообще ругаться по-черному должен.
Go to the top of the page
 
+Quote Post
Romanello
сообщение Sep 4 2008, 08:31
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 10-03-05
Пользователь №: 3 204



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

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.
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 4 2008, 08:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Romanello @ Sep 4 2008, 14:31) *
Теперь понятно что я хотел сделать? но по прежнему не понятно как выделить память под STR.
Совершенно непонятно. Для того чтобы структуру заполнить, нужно ее объявить. Вы же объявили только структуру STR, типа STRUCTURA2, состоящую из одной переменной указателя на структуру типа STRUKTURA1. А где объявление самой структуры типа STRUKTURA1 и где инициализация указателя адресом этой структуры? twak.gif Вы тогда уж словами опишите чего вам хочется. Потому, что на языке Си описание вашей "хотелки" никак не получается. sad.gif
Go to the top of the page
 
+Quote Post
Sat360
сообщение Sep 4 2008, 09:54
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 26
Регистрация: 26-02-08
Из: Томск
Пользователь №: 35 391



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

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 - Sep 4 2008, 09:55
Go to the top of the page
 
+Quote Post
Neural
сообщение Sep 10 2008, 13:55
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 10-11-05
Пользователь №: 10 655



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

не стоит использовать 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;
}
------------------------------------------------
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 10 2008, 14:26
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



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

Код
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;
}
Go to the top of the page
 
+Quote Post
Neural
сообщение Sep 11 2008, 17:07
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 10-11-05
Пользователь №: 10 655



Цитата(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;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 10:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016