Repository 32bit  Forum
Repository 64bit  Wiki

Nuovo forum programmazione

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: Nuovo forum programmazione

Messaggioda boh » dom gen 06, 2008 22:07

Grazie Blizzard per il chiarimento :D
"Be yourself. Everyone else is already taken." ~ Oscar Wilde
Avatar utente
boh
Linux 2.6
Linux 2.6
 
Messaggi: 736
Iscritto il: ven set 16, 2005 0:00
Località: Milano.
Slackware: 14 (x64)
Kernel: 3.2.29
Desktop: KDE 4.10.3

Re: Nuovo forum programmazione

Messaggioda Blizzard » dom gen 06, 2008 22:24

Mondai arimasen! :hello2:
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 23:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: Nuovo forum programmazione

Messaggioda Dani » lun gen 07, 2008 3:43

Blizzard ha scritto:Se poi sei bravo e scrivi int *p=NULL; allora hai il 100%(percentuale vera =D> ) delle possibilità di far esplodere il programma.

Io ho sempre letto che è buona norma inizializzare i puntatori a null :lol: A chi devo credere ? .
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 1:52
Desktop: gnome
Distribuzione: arch

Re: Nuovo forum programmazione

Messaggioda Paoletta » lun gen 07, 2008 11:20

Dani ha scritto:
Blizzard ha scritto:Se poi sei bravo e scrivi int *p=NULL; allora hai il 100%(percentuale vera =D> ) delle possibilità di far esplodere il programma.

Io ho sempre letto che è buona norma inizializzare i puntatori a null :lol: A chi devo credere ? .


immagino che blizzard intenda dire che ti imbatti in un segfault nel momento in cui accedi all'elemento puntato
Avatar utente
Paoletta
Staff
Staff
 
Messaggi: 3867
Iscritto il: lun apr 25, 2005 0:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Nuovo forum programmazione

Messaggioda Blizzard » lun gen 07, 2008 11:28

ciao,
@paoletta: esatto!

@dani:
infatti ho scritto "se sei bravo" :D
è fondamentale inizializzare i puntatori a NULL, come le variabili ad un valore di default.
Se questi/queste(le variabili) non sono globali, al loro interno contengono il valore della locazione di memoria cui fanno riferimento :P
In pratica quando all'interno del main fai int a; a non è a 0 ma al valore che i 4byte che interessano ad a contenevano prima della dichiarazione della variabile.
Per i puntatori è uguale. Se da un lato hai svariate possibilità che questi valori siano insignificanti e che quindi possano portare anche ad una segfault... dall'altro può capitare che il valore sia davvero l'indirizzo di una variabile... e che a questo punto cominci a variare cose che neanche tu hai l'idea.

Ti faccio un rapido esempio sfruttando questa caratteristica
Codice: Seleziona tutto
#include <stdio.h>

void Test()
{
   int a;
   
   if(a!=1)
   {
      printf("ora a ha un valore indefinito: %d\n",a);
      a=1;
      printf("ora l'ho settato ad 1 ed esco dalla procedura\n\n");
      return;
   }
   else
   {
      printf("Vedi che ha conservato il suo valore????\n");
   }
}

int main()
{
   Test();
   Test();
   return 1;
}

Se lanci questo codice vedrai che non essendoci giochi di memoria (altre dichiarazioni o che ne so) tra le due chiamate di Test, a viene dichiarata nella stessa area di memoria... e quindi contiene il valore che aveva prima di terminare il suo ciclo di vita nella funzione!
Non è una cosa piuttosto pericolosa?????
(La risposta è si! perchè ci sono passato... proprio con i puntatori... vattelo a pesca un errore del genere #-o )
Quindi che siano puntatori o variabili normali.... dichiarare+inizializzare!
Penso i costruttori di default siano nati "anche" in virtù di questo aspetto

ciao
Gio
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 23:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: Nuovo forum programmazione

Messaggioda Dani » lun gen 07, 2008 13:01

Ah ok avevo inteso male il "se sei bravo", come un "se non capisci nulla e di conseguenza inizializzi le variabili automatiche a null..." .
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 1:52
Desktop: gnome
Distribuzione: arch

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti