Portál AbcLinuxu, 12. května 2025 03:13
pid_t *pid_aaa;
pid_t *pid_bbb;
void * pamet = malloc(xxxx);
....
pid_aaa = (pid_t*)pamet;
pid_bbb = (pid_t*)(pid_aaa + sizeof(pid_t));
za běhu je sizeof(pid_t)
= 4, ale rozdíl mezi pid_aaa a pid_bbb je 0x10.
Předpokládám, že problém je v zarovnání (align) proměných, netušíte prosím, kudy z toho ven?
To chování je naprosto správné. Uvědomte si, že je-li p
typu T*
a n
celočíselný výraz, pak p+n
ukazuje o n
položek typu T
dále, tj. o n*sizeof(T)
bytů vyšší adresu. V daném případě tedy 4x4, což je 16.
vím to, jen jsem byl zahleděný do kódu pro výpočet velikosti alokace, kde samozřejmě musím použít sizeof(). Už se stydím a jdu tlouct hlavou o zeď.
Ještě jednou omluva za stupidní dotaz ...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.