Hogyan lehet C-ben egy azonos stuktúrákra mutató pointerömbnek dinamikusan memóriát allokálni?
Az biztos, hogy dinamikusan, de a struktúra több adattípust tartalmaz(2 karaktertömb és egy int), ami megnehezíti a megértést.
Hogy egyértelmű legyen a kérdés, itt a kódrészlet,az említett pointertömb a második strutúrában található.
typedef struct {
int ID;
char parameter[17];
char name[100];
}server;
typedef struct {
char executable[100];
int counter;
server *list[];
}config;
A foglalásnál tudom, hogy először a sorok pointereinek kell, utána egy ciklussal a soroknak.
Egy ilyen file adatainak kezeléséhez kellene a struktúrás megoldás:
executable.exe
SorokSzama
1 parameter1 name1
2 parameter2 name2
3 parameter3 name3
4 parameter4 name4
...
Ha a *list[] int-ekre mutatna, akkor valami ilyesmi lenne:
int i;
config.list=(int**)malloc(SorokSzama*sizeof(int*));
for(i=0;i<SorokSzama;i++)
{
config.list[i]=(int*)malloc(3*sizeof(int));
}
De jelen esetben milyen tipuskényszerítés kell, vagy kell-e?
Igazából minden pointer típus ugyanannyi helyet foglal a memóriában, tehát mindegy, hogy milyen explicit típuskonverziót használsz, a színvalak mögött void* -od van mindenhol.
Az int*, char*, <típus>* pointerekek akkor van értelme, ha tömbként akarod kezelni. Plusz átláthatóbb lesz a kód számodra és a fordító számára is. Tehát:
config.list = (server**)malloc(SorokSzama*sizeof(server*));
config.list[i] = (server*)malloc(sizeof(server));
Általánosan:
Struktúrád *pointer = ( Struktúrád * ) malloc ( sizeof ( Struktúrád ) * AhányDarabKell);
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!