Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Alessandro Pellizzari Newsgroups: it.comp.os.linux.development Subject: Re: Spreco di memoria e minaccia alla sicurezza Date: Mon, 12 Jun 2017 15:01:23 +0100 Lines: 35 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net vWdQVk8Oyl0Q9uEUW72qXQYAkMMLUo4P/wBES1HuusQwHPEfg= Cancel-Lock: sha1:yMzyIYjWbZeGiYciA4t+sGVOYRo= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 In-Reply-To: Content-Language: en-US Xref: csiph.com it.comp.os.linux.development:66 On 12/06/17 13:11, guido84 wrote: > Allora astutissimamente gli ho messo: > char pippo[1]; > adesso niente Warning e funzionamento sempre perfetto, anche con > stringhe lunghissime. Questo perche`, per efficienza, Linux alloca memoria in blocchi di dimensione fissa (mi pare 4k), quindi finche` i tuoi dati stanno dentro il blocco, e tu eccedi nell'ultima variabile dichiarata, va tutto bene. Ma gia` se provi a fare char pippo[1]; char pluto[1]; Scrivendo oltre il limite di pippo rischi di sovrascrivere pluto. > allora dico: perche' mai nel libro che ho non fanno altro che > scrivere in continuazione "char pippo[81];" ? > Non sarebbe il caso di mettere SEMPRE "char pippo[1];" ? No. Vedi sopra. Il modo giusto e` usare malloc per allocare la memoria che ti serve, e poi verificare di volta in volta che non la stai eccedendo. A quel punto pippo diventa davvero un puntatore a un'area dinamica di memoria, e lo puoi dichiarare con char *pippo; Bye.