Ahoj, mám jeden pro mě zapeklitý problém se strukturama. Rád bych vytvořil strukturu podobnou příkladu:
typedef struct{
unsigned char RAM_READ[pocet_1];
unsigned char RAM_WRITE[pocet_2];
}MEMORY_MAP;
MEMORY_MAP slave_jednotka_1..... slave_jednotka_n
Ale chtěl bych, aby kazda promena slave_jednotka_x mela jiny pocet_1 nebo pocet_2. Řekněme, že by tato struktura byla v jine struktuře a ta by definovala jak velká budou tato pole. Je něco takového v céčku možné, nebo je to pitomost? Díky za radu
administrator: přesunuto z "Ostatní"
administrator: přejmenováno z "Struktury v Cčku"
Nemůže to být statické pole (protože by byla proměnlivá velikost struktury), musí se použít dynamicky alokovaná pole:
typedef struct{
unsigned char* RAM_READ;
unsigned char* RAM_WRITE;
}MEMORY_MAP;
MEMORY_MAP slave_jednotka_1..... slave_jednotka_n
Při inicializaci struktury se vytvoří pole pomocí malloc:
slave_jednotka_n->RAM_READ = (unsigned char*)malloc(nsizeof(unsigned char));
slave_jednotka_n->RAM_WRITE = (unsigned char)malloc(n*sizeof(unsigned char));
Při rušení struktury se musí pole zrušit pomocí free:
free(slave_jednotka_n->RAM_READ);
free(slave_jednotka_n->RAM_WRITE);
K prvkům pole se pak přistupuje jako k statickému poli:
slave_jednotka_n->RAM_READ*
Taková struktura pak může být součástí jiných struktur, velikost polí je modifikovatelná.
Jiná alternativa - spíš se tato problematika řeší jinak. Aby se nemusela pole alokovat (jednak manažer paměti spotřebovává pro bloky nějakou paměť navíc a jednak je s tím obtížná manipulace), tak se použijí větší pole, pro max. velikost, a ztracená paměť se oželí (jinak se s tím pracuje stejně, jako s menším polem, nevadí že má rezervu):
#define MAP_MAX 10
typedef struct{
unsigned char RAM_READ[MAP_MAX];
unsigned char RAM_WRITE[MAP_MAX];
}MEMORY_MAP;
MEMORY_MAP slave_jednotka_1..... slave_jednotka_n
*