Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se
… více »Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.
Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.
Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.
Google Chrome 152 byl prohlášen za stabilní. Nejnovější stabilní verze 152.0.7977.64 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 327 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Před 35 lety, 25. srpna 1991, oznámil Linus Benedict Torvalds v diskusní skupině comp.os.minix, že vyvíjí (svobodný) operační systém (jako koníček, nebude tak velký a profesionální jako GNU) pro klony 386 (486), že začal v dubnu a během několika měsíců by mohl mít něco použitelného.
Apple představil čipy M6 a M5 Ultra, Mac mini s M6 nebo M5 Pro a Mac Studio s M5 Max nebo M5 Ultra. Fedora Asahi Remix zatím podporuje jenom M1 a M2.
Firefox 157 přinese zapnutou podporu rastrového grafického formátu JPEG XL. Založena je na v Rustu napsané implementaci jxl-rs používané i v Chrome a Chromiu.
Vanilla OS 3 „Reunion“ byl vydán. Tato na Debianu „Sid“ založená desktopová distribuce s transakčními aktualizacemi „neměnného“ základního systému (ABRoot) nově podporuje architekturu arm64 (vedle x86-64), podporuje reprodukovatelné sestavení většiny balíčků a vylepšuje systémové nástroje. Vlastní meta-správce balíčků APX nyní používá Distrobox v2 a je dostupný i pro jiné distribuce.
#include <stdbool.h>
...
typedef struct {
int sprite;
int walk_speed;
int ticks;
bool revealed = false;
int hp;
int an;
int dn;
} Enemy;
void initEnemy(Enemy *e)
{
e->sprite = 4;
e->walk_speed = 2;
e->ticks = 3;
e->revealed = true;
e->hp = 4;
e->an = 5;
e->dn = 6;
}
int main()
{
FILE *f = NULL;
Enemy e;
initEnemy(&e);
...
fwrite(&e, sizeof(Enemy), 1, f);
...
Kompiluji pomoci gcc, všechno funguje jak má, kompilátor si nestěžuje, nicméně když prográmek proženu přes valgrind, začne křičet že ukládám neinicializovanou proměnnou:
==5347== 1 errors in context 1 of 1: ==5347== Syscall param write(buf) points to uninitialised byte(s) ==5347== at 0x410D0B3: __write_nocancel (in /lib/libc-2.17.so) ==5347== by 0x40B2FD0: _IO_file_write@@GLIBC_2.1 (in /lib/libc-2.17.so) ==5347== by 0x40B2EC4: new_do_write (in /lib/libc-2.17.so) ==5347== by 0x405B7E2: (below main) (in /lib/libc-2.17.so) ==5347== Address 0x403100d is not stack'd, malloc'd or (recently) free'd ==5347== Uninitialised value was created by a stack allocation ==5347== at 0x8048501: main (in /home/phaal/c_progs/loadsave)Způsobuje to ona Boolovska proměnná: bool revealed, pokud ji odstraním, nebo zaměním za int, tak si valgrind přestane stěžovat. Netuší někdo proč tomu tak je? Resp. kde dělám chybu, jak bych to mohl opravit? Dík
Řešení dotazu:
true Expands to the integer constant 1. false Expands to the integer constant 0.Každopádně, pokud použiju bit field, např.
unsigned int revealed :1, tak valgrind taky křičí že mi tam lítaji neinicializované bity.
Nejspíš budu muset použít celý 4 bajtový int. Eventuálně si ho můžu sám namakrovat na bool/true/false.
bool v stdbool.h je DEFINE na C99 typ _Bool.
To je číselný typ, který pojme jen a pouze hodnoty 0 a 1.
Na mém systému je sizeof(_Bool) 1, stejně jako sizeof(char), sizeof(int) tu mám 4.
To, že false je nějaká číselná konstanta (integer constant) neznamená,
že je typu int. 35U je třeba taky číselná konstanta,
ale typu unsigned int.
K tvému problému s valgrindem, ten je, jak ti již pověděl někdo přede mnou,
opravdu způsoben paddingem ve struktuře. Bude asi za tím boolem,
např. 3 bajty, aby následující int byl zarovnán (např. na 4B). Valgrind 'ví', že jsi
do toho paddingu nic nezapsal, ale fwrite() tu strukturu zapisuje včetně těch padding bajtů - ty
mají nějakou hodnotu, na kterou se nelze spolehnout. Můžou tam být nuly, ale třeba i část tvého hesla,
které v té aplikaci zadáváš
Řešením je strukturu zapsat do souboru prvek po prvku, nebo třeba
před manipulací zavolat nějaký memset(). Zápis prvek po prvku může být pomalejší ... i když fwrite() používá buffer,
může tam být nějaký zámek, overhead volání fce, ... závisí na aplikaci, ale u práci se soubory
to spíš bude brzdit disk, než volání fce. Zápis každý prvek zvlášť (když to zkombinuješ s intN_t typy)
by mohlo být 'lepší', protože to bude více (ehm, tak trochu) multiplatformní.
ty mají nějakou hodnotu, na kterou se nelze spolehnout. Můžou tam být nuly, ale třeba i část tvého hesla, které v té aplikaci zadávášToto pouze umlci valgrind, ale do souboru se stejne mohou zapsat libovolna data v paddingu, protoze po jakemkoliv zapisu do prvku struktury je hodnota paddingu nedefinovana. Prekladac tam klidne muze zapsat zpatky vase heslo pripadne memset odoptimalizovat uplne pryc, pokud pak nastavujete vsechny prvky struktury.Řešením je strukturu zapsat do souboru prvek po prvku, nebo třeba před manipulací zavolat nějaký memset().
Tiskni
Sdílej: