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.
Avatar utente
boh
Linux 4.x
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

Messaggio da boh »

Grazie Blizzard per il chiarimento :D
"Be yourself. Everyone else is already taken." ~ Oscar Wilde

Avatar utente
Blizzard
Master
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

Messaggio da Blizzard »

Mondai arimasen! :hello2:

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Nuovo forum programmazione

Messaggio da Dani »

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 ? .

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

Re: Nuovo forum programmazione

Messaggio da Paoletta »

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
Blizzard
Master
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

Messaggio da Blizzard »

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

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Nuovo forum programmazione

Messaggio da Dani »

Ah ok avevo inteso male il "se sei bravo", come un "se non capisci nulla e di conseguenza inizializzi le variabili automatiche a null..." .

Rispondi