Romanello 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба Пишу на СИ. есть структура 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 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба Вот так... Так вот.. 1. позвольте не поверить, что этот код "вылетает" - этот бред не может быть вообще скомпилирован :( Пишу на СИ. 2. Умоляю, почитайте учебник. 3. Вы хоть поняли, что хотели написать? Я вообше ничего не понимяю, что это :( могло-бы значить. Moderator: 4. Помещение такого поста в раздел "Системный уровень проектирования" ни в какие ворота не лезет - перенес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба Пишу на СИ.За еду Не обращайте внимания. Шутка. есть структура ... Вот так программа вылетает скорее всего проблемы с памятью. У меня получаются проблемы с выделением памяти. Как мне указать необходимый размер памяти или надо выделить нужное количество с запасом? А что вы хотите получить с помощью этих структур? Смысл какой? Попробуйте поставить себя на место компилятора, "развернуть" эти структуры и посмотреть, что из этого получается. По-моему что-то несуразное :laughing: Компилятор вообще ругаться по-черному должен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Romanello 0 4 сентября, 2008 Опубликовано 4 сентября, 2008 · Жалоба Действительно не так написал. 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 0 4 сентября, 2008 Опубликовано 4 сентября, 2008 · Жалоба Теперь понятно что я хотел сделать? но по прежнему не понятно как выделить память под STR.Совершенно непонятно. Для того чтобы структуру заполнить, нужно ее объявить. Вы же объявили только структуру STR, типа STRUCTURA2, состоящую из одной переменной указателя на структуру типа STRUKTURA1. А где объявление самой структуры типа STRUKTURA1 и где инициализация указателя адресом этой структуры? :twak: Вы тогда уж словами опишите чего вам хочется. Потому, что на языке Си описание вашей "хотелки" никак не получается. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sat360 0 4 сентября, 2008 Опубликовано 4 сентября, 2008 (изменено) · Жалоба Может имелось в виду что-то вроде: 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; } ЗЫ не забудь освободить память. Изменено 4 сентября, 2008 пользователем Sat360 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Neural 0 10 сентября, 2008 Опубликовано 10 сентября, 2008 · Жалоба давно это было.. не стоит использовать 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 1 10 сентября, 2008 Опубликовано 10 сентября, 2008 · Жалоба По-моему так более внятно: 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 0 11 сентября, 2008 Опубликовано 11 сентября, 2008 · Жалоба По-моему так более внятно: 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться