Nuovo forum 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.
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.
- boh
- Linux 4.x
- Messaggi: 1027
- Iscritto il: ven 16 set 2005, 0:00
- Slackware: 14.2 (x64)
- Kernel: 4.4.111
- Desktop: KDE 4.14.32
- Località: Milano
- Contatta:
Re: Nuovo forum programmazione
Grazie Blizzard per il chiarimento
"Be yourself. Everyone else is already taken." ~ Oscar Wilde
- Blizzard
- Master
- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: Nuovo forum programmazione
Mondai arimasen!
Re: Nuovo forum programmazione
Io ho sempre letto che è buona norma inizializzare i puntatori a null A chi devo credere ? .Blizzard ha scritto: Se poi sei bravo e scrivi int *p=NULL; allora hai il 100%(percentuale vera ) delle possibilità di far esplodere il programma.
- Paoletta
- Staff
- Messaggi: 3975
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
Re: Nuovo forum programmazione
immagino che blizzard intenda dire che ti imbatti in un segfault nel momento in cui accedi all'elemento puntatoDani ha scritto:Io ho sempre letto che è buona norma inizializzare i puntatori a null A chi devo credere ? .Blizzard ha scritto: Se poi sei bravo e scrivi int *p=NULL; allora hai il 100%(percentuale vera ) delle possibilità di far esplodere il programma.
- Blizzard
- Master
- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: Nuovo forum programmazione
ciao,
@paoletta: esatto!
@dani:
infatti ho scritto "se sei bravo"
è 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
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 )
Quindi che siano puntatori o variabili normali.... dichiarare+inizializzare!
Penso i costruttori di default siano nati "anche" in virtù di questo aspetto
ciao
Gio
@paoletta: esatto!
@dani:
infatti ho scritto "se sei bravo"
è 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;
}
Non è una cosa piuttosto pericolosa?????
(La risposta è si! perchè ci sono passato... proprio con i puntatori... vattelo a pesca un errore del genere )
Quindi che siano puntatori o variabili normali.... dichiarare+inizializzare!
Penso i costruttori di default siano nati "anche" in virtù di questo aspetto
ciao
Gio
Re: Nuovo forum programmazione
Ah ok avevo inteso male il "se sei bravo", come un "se non capisci nulla e di conseguenza inizializzi le variabili automatiche a null..." .