Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.os.linux.development > #67

Re: Spreco di memoria e minaccia alla sicurezza

Path csiph.com!aioe.org!.POSTED!not-for-mail
From guido84 <guido84@invalid.invalid>
Newsgroups it.comp.os.linux.development
Subject Re: Spreco di memoria e minaccia alla sicurezza
Date Mon, 12 Jun 2017 14:57:49 +0000 (UTC)
Organization Aioe.org NNTP Server
Lines 96
Message-ID <ohma5d$fvf$1@gioia.aioe.org> (permalink)
References <ohm0ck$1rf6$1@gioia.aioe.org> <eq7l5jF9dpaU1@mid.individual.net>
NNTP-Posting-Host wbddthcu++T7LiUtG2OuyQ.user.gioia.aioe.org
X-Complaints-To abuse@aioe.org
X-Notice Filtered by postfilter v. 0.8.2
Xref csiph.com it.comp.os.linux.development:67

Show key headers only | View raw


Il 12/6/2017 16:01:23 Alessandro Pellizzari scrisse:
>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.

TNX! questa me la faccio piu' tardi, voglio fargli sovrascrivere
pluto (ma 4k sono veramente moltissmi, glieli daro' da file).

>> 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;

Per imparare le funzioni e poi saperle usare, per atoi() ho
cercato di poter dargli la stringa in input:
1. da argv[1], ormai facile: ./prova 111
2. col comando echo, unico modo: ./prova $(echo 111)
3. passandogliela con una pipe: echo 111 | ./prova -

Per fare il 3 (tralasciando per il momento che non so fargli
distinguere "-" da qualsiasi altro carattere diverso da cifre),
non posso (mi sembra!) usare malloc, perche' scanf() non me lo
puo' dire quanto e' lunga prima di riceverla. E per riceverla
deve avere un posto-vettore dove metterla... insomma: il gatto
che si mangia la coda. Percio' ho trovato l'escamotage di pippo[0]
(adesso ho visto che prende anche lo zero).

Ecco il codice.
------
#include <stdio.h>
#include <string.h>

int atoi(char *origine);
char dapipe[0];

int main(int argc, char** argv)
{
int arg1, arg2;

// ./prova  (per l'help)
if (argc == 1)
{
printf("\033[33mUsage: Stringa di arg1 in numero allo stdout \033[m \n");
}

else
{
arg1 = atoi(argv[1]);

// echo 123 | ./prova -
if (arg1 == 0)
{
scanf("%s", dapipe);
arg2 = atoi(dapipe);
printf("%d\n", arg2);
}

// Caso ordinario
else
{
printf("%d\n", arg1);
}
}

return 0;
}
----------------


-- 
Saluti,
Guido

Back to it.comp.os.linux.development | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Spreco di memoria e minaccia alla sicurezza guido84 <guido84@invalid.invalid> - 2017-06-12 12:11 +0000
  Re: Spreco di memoria e minaccia alla sicurezza Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-12 15:01 +0100
    Re: Spreco di memoria e minaccia alla sicurezza guido84 <guido84@invalid.invalid> - 2017-06-12 14:57 +0000
      Re: Spreco di memoria e minaccia alla sicurezza Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-12 17:14 +0100
  Re: Spreco di memoria e minaccia alla sicurezza enoquick <enoquick@gmail.com> - 2017-06-12 21:40 -0500
    Re: Spreco di memoria e minaccia alla sicurezza guido84 <guido84@invalid.invalid> - 2017-06-13 07:28 +0000
      Re: Spreco di memoria e minaccia alla sicurezza Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-13 10:16 +0100

csiph-web