[MISTERO] C corruzione della memoria

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio da Mario Vanoni »

lamarozzo ha scritto:Sono d'accordo. I programmatori devono cercare di prevenire tutte le mosse sbagliate dell'utente. In più aggiungerei che chi scrive un compilatore deve cercare di prevenire al meglio tutte le possibili mosse sbagliate dei suoi utenti, cioè i programmatori. E' solo questione di punti di vista, ma penso che in fondo stiamo dicendo le stesse cose. :)
NO!

Il compilatore e` un arnese, puo` essere piu` o meno intelligente.

Il programma e` scritto dal cervello umano, e gli utenti sono umani creativi!

Mario Vanoni

Avatar utente
lamarozzo
Linux 3.x
Linux 3.x
Messaggi: 732
Iscritto il: gio 14 lug 2005, 0:00
Desktop: xfce
Distribuzione: archlinux
Località: Roma

Messaggio da lamarozzo »

Mario Vanoni ha scritto: NO!

Il compilatore e` un arnese, puo` essere piu` o meno intelligente.

Il programma e` scritto dal cervello umano, e gli utenti sono umani creativi!

Mario Vanoni
Guarda che anche il compilatore è un programma (peraltro in larga parte scritto in C). Non vedo perchè il compilatore debba essere uno stupido arnese che si rifiuta di segnalare gli errori, mentre i programmi invece gli errori li devono segnalare tutti ed il prima possibile. Questa asimmetria nel tuo ragionamento proprio non la capisco.

Ma non voglio convincerti. Alla fine nè io nè te (credo) stiamo scrivendo un compilatore.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio da Mario Vanoni »

lamarozzo ha scritto:
Mario Vanoni ha scritto: NO!

Il compilatore e` un arnese, puo` essere piu` o meno intelligente.

Il programma e` scritto dal cervello umano, e gli utenti sono umani creativi!

Mario Vanoni
Guarda che anche il compilatore è un programma (peraltro in larga parte scritto in C). Non vedo perchè il compilatore debba essere uno stupido arnese che si rifiuta di segnalare gli errori, mentre i programmi invece gli errori li devono segnalare tutti ed il prima possibile. Questa asimmetria nel tuo ragionamento proprio non la capisco.

Ma non voglio convincerti. Alla fine nè io nè te (credo) stiamo scrivendo un compilatore.
Infatti, ma scriviamo programmi usando arnesi (compilatori) forniti.

Ma con l'arnese in mano, devi dare il meglio di te stesso,
magari in piu` del previsto, con qualche extra.

L'arnese e` quello che hai in mano, non puoi cambiarlo,
quindi recriminare che l'arnese potrebbe essere migliore ...
Tocca a te riempire le mancanze dell'arnese, il resto e` bla-bla.

Mario Vanoni

Avatar utente
ildiama
Linux 3.x
Linux 3.x
Messaggi: 536
Iscritto il: mar 27 dic 2005, 16:49
Slackware: mine
Kernel: 2.6.alto..
Desktop: KDE4
Località: Senigallia
Contatta:

Messaggio da ildiama »

Tanto per rientrare un filo in argomento ;) il controllo sul limite dell'array manca per lo stesso motivo per cui manca un garbage collector o altre amenità ritenute indispensabili su altri linguaggi: velocità. E nessuno infatti ha prodotto mai un linguaggio veloce (e difficile, entusiasmante, che ti mette alla prova..) come il C.

Ciao.

Avatar utente
People
Linux 2.x
Linux 2.x
Messaggi: 216
Iscritto il: mar 22 giu 2004, 0:00
Slackware: 12.1
Kernel: 2.6.
Desktop: KDE

Messaggio da People »

ildiama ha scritto:il controllo sul limite dell'array manca per lo stesso motivo per cui manca un garbage collector o altre amenità ritenute indispensabili su altri linguaggi: velocità.
Certo che se intendi la velocità di esecuzione del binario prodotto, il controllo da fare sull'esempio citato da lamarozzo è al "compile time", quindi non va ad inficiare la velocità.

Codice: Seleziona tutto

static double R[8];
int main()
{
        R[8]=2.;
        return 0;
} 
Aggiungo, IMVHO, premettendo che nel settore della programmazione ho una esperienza "limitata", che più il compilatore ti aiuta ad evidenziare problemi "ovvi" ma difficili da vedere, più il programmatore si può concentrare su errori di concetto, ottimizzando i tempi di sviluppo dell'applicazione. In poche parole concordo con albatros del quale cito una frase che riassume il concetto
albatros ha scritto:avere la possibilità che un programma stupido, ma dannatamente più veloce di un uomo, possa controllare anche errori stupidi fatti una persona intelligente non la ritengo una idea stupida
Ho detto la mia.... ;)
Ciao.
P.

Avatar utente
ildiama
Linux 3.x
Linux 3.x
Messaggi: 536
Iscritto il: mar 27 dic 2005, 16:49
Slackware: mine
Kernel: 2.6.alto..
Desktop: KDE4
Località: Senigallia
Contatta:

Messaggio da ildiama »

People ha scritto:
ildiama ha scritto:il controllo sul limite dell'array manca per lo stesso motivo per cui manca un garbage collector o altre amenità ritenute indispensabili su altri linguaggi: velocità.
Certo che se intendi la velocità di esecuzione del binario prodotto, il controllo da fare sull'esempio citato da lamarozzo è al "compile time", quindi non va ad inficiare la velocità.
E invece sì! Ecco il problema, La creazione del vettore in C corrisponde esattamente alla creazione del puntatore + allocazione TOT spazi in memoria. STOP. Nessun controllo o struttura di controllo su di esso (anche da portarsi dietro nell'eseguibile, che porterebbe ad esempio ad un segmentation fault o giù di lì).
Se poi vuoi sbarellare e andare oltre.. sei libero. Anche di sbagliare. Bello no?

Avatar utente
lamarozzo
Linux 3.x
Linux 3.x
Messaggi: 732
Iscritto il: gio 14 lug 2005, 0:00
Desktop: xfce
Distribuzione: archlinux
Località: Roma

Messaggio da lamarozzo »

ildiama ha scritto:
People ha scritto:
ildiama ha scritto:il controllo sul limite dell'array manca per lo stesso motivo per cui manca un garbage collector o altre amenità ritenute indispensabili su altri linguaggi: velocità.
Certo che se intendi la velocità di esecuzione del binario prodotto, il controllo da fare sull'esempio citato da lamarozzo è al "compile time", quindi non va ad inficiare la velocità.
E invece sì! Ecco il problema, La creazione del vettore in C corrisponde esattamente alla creazione del puntatore + allocazione TOT spazi in memoria. STOP. Nessun controllo o struttura di controllo su di esso (anche da portarsi dietro nell'eseguibile, che porterebbe ad esempio ad un segmentation fault o giù di lì).
Se poi vuoi sbarellare e andare oltre.. sei libero. Anche di sbagliare. Bello no?
No, hai frainteso quello che dice People. Il controllo che fa il compilatore Intel è a compile time e non a run time, quindi non ha nessuna conseguenza sull'eseguibile. Semplicemente si deve accorgere che ho dichiarato un array di dimensione 8 e da qualche parte nel codice sto usando la nona posizione. Questo è possibile a compile time perchè sto usando espressioni note al tempo di compilazione, come R[8] e non R[variabile_che_può_valere_8].
Dopodichè deve solamente sollevare un warning. Non può sollevare un errore perchè non è previsto nello standard e, per una qualunque ragione potrei voler implementare proprio quel comportamento.

Concordo in pieno People.

Avatar utente
People
Linux 2.x
Linux 2.x
Messaggi: 216
Iscritto il: mar 22 giu 2004, 0:00
Slackware: 12.1
Kernel: 2.6.
Desktop: KDE

Messaggio da People »

lamarozzo ha scritto:Semplicemente si deve accorgere che ho dichiarato un array di dimensione 8 e da qualche parte nel codice sto usando la nona posizione. Questo è possibile a compile time perchè sto usando espressioni note al tempo di compilazione, come R[8] e non R[variabile_che_può_valere_8].
Esattamente, intendevo proprio questo... scusate se non sono stato abbastanza chiaro. :roll:

Poi, quel vettore, così controllato a compile time deve risultare, a livello di binario nulla più di quello che dice ildiama:
ildiama ha scritto:creazione del puntatore + allocazione TOT spazi in memoria. STOP.
Ovviamente, se l'indice del vettore non è una costante, ma una variabile... questo controllo non si può fare...

IMHO, questo è il giusto compromesso... anche a me non piacerebbe avere un compilatore che aggiunge codice con controlli a run time... su questo non ci sono dubbi...
P.

Avatar utente
Toni
Linux 3.x
Linux 3.x
Messaggi: 999
Iscritto il: lun 30 gen 2006, 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Messaggio da Toni »

a prescindere dal compilatore che si usa , questi che si potrebbero definire problemi sono proprio la caratteristice intrinsiche del c .Quando qualcuno dice che è un linguaggio potente intende anche che non pone limitazioni , Ma come diceva uno spot la potenza è nulla senza controllo :)

se si immagina il c++ pensato come evoluzione del c ,si nota che sono stati aggiunti molti controlli in piu .esempio, I costruttori altro non servono che per far si che le variabili create non abbiano valori indefiniti come invece si puo fare con il c senza una esplicita assegnazione.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio da Mario Vanoni »

il_notturnista ha scritto: Ma come diceva uno spot la potenza è nulla senza controllo :)
???

Una Ferrari, alta gamma, controlla/corregge il pilota?

Mario Vanoni

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

Mario Vanoni ha scritto: Una Ferrari, alta gamma, controlla/corregge il pilota?
esempio infelice:

le ferrari da formula 1 hanno una quantità di spie e "warning" che fanno sembrare il volante un albero di natale, per non parlare poi di tutte le "telemetrie". Inoltre non dimentichiamoci che l'elettronica è bandita dalle corse perché il computer spesso guida meglio del pilota.

detto questo mi sembra che stiamo andando fuori tema:

il problema era che icc alza un warning per segnalare un comportamento che nel 99% dei casi è una svista del programmatore che normalmente ringrazia e va a giocare a tennis il resto del pomeriggio. Io ringrazio l'intel e non mi sento defraudato neanchè un attimo della mia creatività. Nell'uno per cento dei casi in cui il comportamento è voluto (in realtà non mi viene in mente quando potrebbe esserlo) ignoro il warning e basta.

Avatar utente
ildiama
Linux 3.x
Linux 3.x
Messaggi: 536
Iscritto il: mar 27 dic 2005, 16:49
Slackware: mine
Kernel: 2.6.alto..
Desktop: KDE4
Località: Senigallia
Contatta:

Messaggio da ildiama »

puzuma ha scritto: il problema era che icc alza un warning per segnalare un comportamento che nel 99% dei casi è una svista del programmatore che normalmente ringrazia e va a giocare a tennis il resto del pomeriggio. Io ringrazio l'intel e non mi sento defraudato neanchè un attimo della mia creatività. Nell'uno per cento dei casi in cui il comportamento è voluto (in realtà non mi viene in mente quando potrebbe esserlo) ignoro il warning e basta.
Forse neanche io mi sono spiegato tanto bene.. io prima cercavo di spiegare perché gcc non alza quello warning.
Però sta cosa di tennis e ferrari proprio non la capisco.
  • 1) se uno programma per piacere, forse troverà piacere anche a debuggare errori non voluti che ti fanno "divertire", non "perdere" un pomeriggio. Si impara e ci si diverte. Se uno si diverte col tennis, vada pure.
    2) se uno programma in C per lavoro, sa che questi controlli sono a suo carico e che se non li fa rischia. Io direi.. il lavoro :badgrin:
tutto qui.

PS: adesso mi preparo per il calcetto.. :lol:

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio da Mario Vanoni »

puzuma ha scritto:
Mario Vanoni ha scritto: Una Ferrari, alta gamma, controlla/corregge il pilota?
esempio infelice:

le ferrari da formula 1 hanno una quantità di spie e "warning" che fanno sembrare il volante un albero di natale, per non parlare poi di tutte le "telemetrie". Inoltre non dimentichiamoci che l'elettronica è bandita dalle corse perché il computer spesso guida meglio del pilota.

detto questo mi sembra che stiamo andando fuori tema:

il problema era che icc alza un warning per segnalare un comportamento che nel 99% dei casi è una svista del programmatore che normalmente ringrazia e va a giocare a tennis il resto del pomeriggio. Io ringrazio l'intel e non mi sento defraudato neanchè un attimo della mia creatività. Nell'uno per cento dei casi in cui il comportamento è voluto (in realtà non mi viene in mente quando potrebbe esserlo) ignoro il warning e basta.
Intendevo una macchina potente, con guidatore junior/poco esperto,
sulle strade di Cuasso al Monte (Va), riuscira` ad arrivare in Valganna?

Permettete dubbi ...

Mario Vanoni

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

Mario Vanoni ha scritto:
puzuma ha scritto:
Mario Vanoni ha scritto: Una Ferrari, alta gamma, controlla/corregge il pilota?
esempio infelice:

le ferrari da formula 1 hanno una quantità di spie e "warning" che fanno sembrare il volante un albero di natale, per non parlare poi di tutte le "telemetrie". Inoltre non dimentichiamoci che l'elettronica è bandita dalle corse perché il computer spesso guida meglio del pilota.

detto questo mi sembra che stiamo andando fuori tema:

il problema era che icc alza un warning per segnalare un comportamento che nel 99% dei casi è una svista del programmatore che normalmente ringrazia e va a giocare a tennis il resto del pomeriggio. Io ringrazio l'intel e non mi sento defraudato neanchè un attimo della mia creatività. Nell'uno per cento dei casi in cui il comportamento è voluto (in realtà non mi viene in mente quando potrebbe esserlo) ignoro il warning e basta.
Intendevo una macchina potente, con guidatore junior/poco esperto,
sulle strade di Cuasso al Monte (Va), riuscira` ad arrivare in Valganna?

Permettete dubbi ...

Mario Vanoni
conosco la zona, e la vedo dura...

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

ildiama ha scritto: 1) se uno programma per piacere, forse troverà piacere anche a debuggare errori non voluti che ti fanno "divertire", non "perdere" un pomeriggio. Si impara e ci si diverte. Se uno si diverte col tennis, vada pure.
personalmente non trovo divertente ne un gran chè creativo debuggare il fatto che in una riga su 100.000 ho scritto 8 invece che 7, però questo è soggettivo.
ildiama ha scritto: 2) se uno programma in C per lavoro, sa che questi controlli sono a suo carico e che se non li fa rischia. Io direi.. il lavoro :badgrin:
ok, allora io non so programmare, che controllo dovrei mettere se in un'indice per sbaglio ho scritto un numero invece che un altro? sono daccordo controllare l'input dell'utente o di un programmatore che usa una mia funzione ma controllare anche l'input dello stesso programmatore che scrive il codice mi sembra difficile ;)

Rispondi