LINUX.ORG.RU

Как сформировать такую структуру динамически


0

0

Добрый день! Возникла такая задачка. Её можно решить хаком, но хак не интересно.

Struct ONE { char d[10] ;};

Struct TWO { ONE b[XXX] ;};

XXX – не известен ..... вычисляется в поцессе работы программы. Как сформировать такую структуру динамически.


Переносимый вариант:
------------------------------
#define XXX ....
typedef char data_type;
struct Dyn { data_type d[1] ;};

struct Dyn* ptr =
   (struct Dyn*)malloc(sizeof(struct Dyn)+((XXX-1)*sizeof(data_type));

==============================
Вариант для gcc:
------------------------------
#define XXX ....
typedef char data_type;
struct Dyn { data_type d[] ;};

struct Dyn* ptr =
   (struct Dyn*)malloc(sizeof(struct Dyn)+XXX*sizeof(data_type)); 

kosmonavt
()
Ответ на: комментарий от kosmonavt

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

Ну а если это класс с чем-нибудь виртуальным, то тоже не переносимо..

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> Есть гарантия что последний член размещается последним??

Есть.

> если это класс с чем-нибудь виртуальным, то тоже не переносимо..

Если это класс, то значит C++, значит используй vector. Если надо для отображения на файл, то объявляй структуру без всяких виртуальностей и всё будет Ok.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от dilmah

>Есть гарантия что последний член размещается последним??

Ну тогда, господа, работаем с адресной арифметикой. IMHO, по-другому ни как.

>Ну а если это класс с чем-нибудь виртуальным, то тоже не переносимо.

А вот это зависит от конкретного случая и вопрос надо рассматривать отдельно.

kosmonavt
()
Ответ на: комментарий от dilmah

>а ссылку?:)
===========================

/* The BITMAPINFO structure defines the dimensions and color information for a Windows device-independent bitmap (DIB). */

typedef struct tagBITMAPINFO { // bmi  
   BITMAPINFOHEADER bmiHeader; 
   RGBQUAD          bmiColors[1]; 
} BITMAPINFO; 

===========================
Число элементов bmiColors может быть от 2 до 256.

kosmonavt
()
Ответ на: комментарий от dilmah

> Ткни пожалуста пальцем: http://www.vmunix.com/~gabor/c/draft.html

6.5.2.1 Structure and union specifiers

Semantics

page 123

[#12] Within a structure object, the  non-bit-field  members
       and the units in which bit-fields reside have addresses that
       increase in the order in which they are declared.  A pointer
       to  a  structure  object,  suitably converted, points to its
       initial member (or if that member is a  bit-field,  then  to
       the unit in which it resides), and vice versa.  There may be
       unnamed padding within a structure object, but  not  at  its
       beginning.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от kosmonavt

Спасибо Ребята, я понял . Просто я думал вдруг есть нечто более технологичное... нет, так нет. Пусть так будет.

kryl
() автор топика
Ответ на: комментарий от kryl

>Просто я думал вдруг есть нечто более технологичное

а куда более технологичнее?

fixme: С99 вроде чё-то на подобии этого имеет, но кроме гцц никто более и не скомпилит :)

Pi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.