Když někdo napíše char *x=malloc(10) .... x[10]='a' --- ještě, že máme tu Electric Fenci, na vyhazování studentů od zápočtové písemky je vhodná :) Hlavně se nesmí zapomenout zadat export EF_ALIGNMENT=1
Já jsem v jednom zápočťáku viděl tohle (zadání bylo takové, že délka řádku je neomezená):
char *x = new char [];
gets(x);
--- pak jsme uvažovali, co to new char [] dělá, správné C++ to není. Asi to bude nějaké microsoftí rozšíření, netuší to někdo? Student tvrdil, že ten gets to pole sám roztahuje, s čímž byl vyhozen.
A jak ten program zkompiloval a předváděl? Nebo to vůbec nezkoušel zkompilovat? Pokud to funguje jenom pod MS kompilátorem, vyhodil bych ho už jenom za to. ;-)
Zkompilovalo se mu to (a údajně to i chodilo) pod MS Visual C, gcc to odmítlo. Jen by mě zajímalo, co ta konstrukce v MSVC znamená. Možná to prý bude něco s manažovanými pointery, ale přesně to nevím.
Podle mě to s manažovanými pointery nic společného nemá. Když napíšeš
char *x = new (char[]);
zkousne to i g++, takže je problém spíš v parseru. Ale co to má znamenat, vážně netuším a ani to zjišťovat nechci. Podle mě to zkrátka alokuje nový pointer a jeho adresu přiřadí do x. Fuj, humus. ;-)
Nevím jak jinde, ale ve starém Borlandu char xxx[] znamená prvek nulové délky (užitečné např. ve struktuře pro zjištění adresy (s použitelným typem), když chci kašlat na union pro rychlou kopii bitových polí). Tedy soudím, že new char[]; vrátí unikátní ukazatel (pokaždé jiný, nový, nutný dealokovat), ale u kterého není zaručeno žádné místo pro data.