Repository 32bit  Forum
Repository 64bit  Wiki

Nuovo forum programmazione

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.

Re: Nuovo forum programmazione

Messaggioda boh » dom gen 06, 2008 21: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: 946
Iscritto il: gio set 15, 2005 23:00
Località: Milano
Slackware: 14.1 (x64)
Kernel: 3.10.17
Desktop: KDE 4.10.5

Re: Nuovo forum programmazione

Messaggioda Blizzard » dom gen 06, 2008 21:24

Mondai arimasen! :hello2:
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22: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 2: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 0:52
Desktop: gnome
Distribuzione: arch

Re: Nuovo forum programmazione

Messaggioda Paoletta » lun gen 07, 2008 10: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: 3899
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Nuovo forum programmazione

Messaggioda Blizzard » lun gen 07, 2008 10: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 22: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 12: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 0:52
Desktop: gnome
Distribuzione: arch

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite