Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi N - Z > Reti di calcolatori > [CURIOSITA'] Programmazione in C
Pages (2): « 1 [2]   Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
UZI
free pain dispenser

User info:
Registered: Mar 2003
Posts: 2211 (0.27 al dì)
Location: monza - troppi fighetti
Corso: com. dig.
Anno: Dottor Morte
Time Online: 14 Days, 4:46:06: [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by Voodoo
Salve gente,come da consiglio di yeah,visto che sono ancora al momento uno Winzozziano ( :D ),ho scaricato MinGW...
Volevo esser sicuro di averlo installato bene,perchè scrivendo un codice preso pari pari da una guida al C,l'applicazione mi si impalla...Ecco il codicillo simplizissimus:

code:
#include <stdio.h> char *string = "Rosso\n"; int main(int argc, char *argv[]) { printf(string); *(string+3) = 'p'; printf(string); }


Ora...io nn ho messo alcuna variabile ambiente perchè mi sembrava nn fosse richiesto...la compilazione va a buon fine,ma l'esecuzione si blocca all'atto dell'assegnazione del carattere.
Mi sapete dire perchè?

Ciao Grazie


questo fatto mi ha incuriosito, allora mi sono messo ad indagare. alla fine, non so bene perchè ma questa versione del programma funziona.
code:
#include <stdio.h> char s[] ="Rosso\n"; char *string = s; int main(int argc, char *argv[]) { printf(string); *(string+3) = 'p'; printf(string); return 0; }


ora, il problema era proprio l'assegnamento del carattere che provocava un SIGBUS (un tipo di segnale di errore UNIX).
secondo me, ma è solo un'idea mia, il problema è che nella prima versione si assegnava al puntatore string sì il puntatore al primo carattere di "Rosso/n", ma il fatto è che questa stringa è dichiarata come costante, per cui evidentemente un accesso in memoria del tipo *(string+3) nè tantomeno la scrittura in quell'area non sono consentite. nella versione che ho postato, "Rosso/n" è assegnata ad una variabile array, quindi un'area di memoria scrivibile. Credo sia questo il problema, ma non sono un guru di C !

cmq non è un problema dell'installazione del programma MinGW, dato che ho provato il tutto su un apple con OSX utilizzando sia il compilatore di xcode che gcc, e su entrambi non funzionava.

__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family

Last edited by UZI on 25-02-2005 at 19:35

25-02-2005 19:30
Click Here to See the Profile for UZI Click Here to See the Blog of UZI Click here to Send UZI a Private Message Find more posts by UZI Add UZI to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
DeepBlue
tired guy

User info:
Registered: Sep 2003
Posts: 4258 (0.52 al dì)
Location: CSN
Corso: Info tlc
Anno:
Time Online: 52 Days, 8:40:31 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by UZI
ma il fatto è che questa stringa è dichiarata come costante

mmm
Più o meno :)

Leggete qui: http://www.eskimo.com/~scs/C-faq/q1.32.html

per cui evidentemente un accesso in memoria del tipo *(string+3)


No, calma :)
In lettura puoi benissimo accedere a quella zona di memoria. Infatti questo:
code:
#include <stdio.h> char *string = "Rosso\n"; char p; int main(void) { p = *(string+3); printf("%c", p); }

funziona benissimo :)

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~

25-02-2005 19:58
Click Here to See the Profile for DeepBlue Click Here to See the Blog of DeepBlue Click here to Send DeepBlue a Private Message Find more posts by DeepBlue Add DeepBlue to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
yeah
.grande:maestro.

User info:
Registered: Nov 2003
Posts: 1644 (0.20 al dì)
Location: Cologno Monzese
Corso: Informatica Magistrale
Anno: II
Time Online: 12 Days, 21:36:41 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Non so cosa stabilisca lo standard a riguardo, ma ricordo anche io che una stringa usata in quel modo dovrebbe risultare costante.

Stranamente, il compilatore del Visual C++ non la pensa allo stesso modo e il codice compilato con esso funziona perfettamente :)

Io suggerirei cmq di usare
char string[] = "Rosso\n";
così sei sicuro che puoi scriverci e leggerci senza problemi :)

__________________
?

25-02-2005 20:08
Click Here to See the Profile for yeah Click here to Send yeah a Private Message Find more posts by yeah Add yeah to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
UZI
free pain dispenser

User info:
Registered: Mar 2003
Posts: 2211 (0.27 al dì)
Location: monza - troppi fighetti
Corso: com. dig.
Anno: Dottor Morte
Time Online: 14 Days, 4:46:06: [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by DeepBlue
mmm
Più o meno :)

Leggete qui: http://www.eskimo.com/~scs/C-faq/q1.32.html


No, calma :)
In lettura puoi benissimo accedere a quella zona di memoria. Infatti questo:



sì beh mi sono espresso male in effetti... ma non è sempre facile esprimersi con parole proprie, il fatto è che quanto ho postato è quello che ho dedotto nella mia mente ignorante, non avendo trovato dei documenti, tipo quello postato da te, che ne parlassero.

cmq il discorso rimane incentrato su quell'assegnamento bastardo: nella prima versione il puntatore punta ad una costante stringa, nella seconda prima si inizializza un array (che è una variabile, quindi scrivibile) e poi gli si punta il puntatore.

secondo questa logica, il ragionamento non fà una grinza, ma a quanto dice yeah ora con visual c++ il codice funziona... mah :?

__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family

25-02-2005 21:22
Click Here to See the Profile for UZI Click Here to See the Blog of UZI Click here to Send UZI a Private Message Find more posts by UZI Add UZI to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
DeepBlue
tired guy

User info:
Registered: Sep 2003
Posts: 4258 (0.52 al dì)
Location: CSN
Corso: Info tlc
Anno:
Time Online: 52 Days, 8:40:31 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by UZI
ondo questa logica, il ragionamento non fà una grinza, ma a quanto dice yeah ora con visual c++ il codice funziona... mah :?

Il compilatore del VC++ non è gcc :)

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~

25-02-2005 21:34
Click Here to See the Profile for DeepBlue Click Here to See the Blog of DeepBlue Click here to Send DeepBlue a Private Message Find more posts by DeepBlue Add DeepBlue to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
UZI
free pain dispenser

User info:
Registered: Mar 2003
Posts: 2211 (0.27 al dì)
Location: monza - troppi fighetti
Corso: com. dig.
Anno: Dottor Morte
Time Online: 14 Days, 4:46:06: [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by DeepBlue
Il compilatore del VC++ non è gcc :)


sì ma diamine non è una differenza da poco!!! cioè, è come se vcc non proteggesse adeguatamente le costanti... ci saranno pure degli standard a riguardo!

__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family

25-02-2005 22:15
Click Here to See the Profile for UZI Click Here to See the Blog of UZI Click here to Send UZI a Private Message Find more posts by UZI Add UZI to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
yeah
.grande:maestro.

User info:
Registered: Nov 2003
Posts: 1644 (0.20 al dì)
Location: Cologno Monzese
Corso: Informatica Magistrale
Anno: II
Time Online: 12 Days, 21:36:41 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Personalmente non trovo scorretto il comportamento di vc++: quando viene dichiarato il tutto, in qualche modo il programma indica una porzione di memoria in cui ci sono alcune lettere contigue.

Tale memoria appartiene al processo come quella di qualsiasi altra variabile (per lo meno globale e locale al blocco di codice in esecuzione) e dovrebbe essere scrivibile senza problemi.

La cosa che mi è strana è che l'errore lo da in runtime, non in compile time... boh :)

__________________
?

25-02-2005 22:55
Click Here to See the Profile for yeah Click here to Send yeah a Private Message Find more posts by yeah Add yeah to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
UZI
free pain dispenser

User info:
Registered: Mar 2003
Posts: 2211 (0.27 al dì)
Location: monza - troppi fighetti
Corso: com. dig.
Anno: Dottor Morte
Time Online: 14 Days, 4:46:06: [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by yeah
Personalmente non trovo scorretto il comportamento di vc++: quando viene dichiarato il tutto, in qualche modo il programma indica una porzione di memoria in cui ci sono alcune lettere contigue.

Tale memoria appartiene al processo come quella di qualsiasi altra variabile (per lo meno globale e locale al blocco di codice in esecuzione) e dovrebbe essere scrivibile senza problemi.

La cosa che mi è strana è che l'errore lo da in runtime, non in compile time... boh :)


mah, io invece trovo più corretto il comportamento di gcc... ok che la costant si trova nell'area di memoria del programma, ma per definizione non dovrebbe essere scrivibile! cioè, non è una variabile, e ad un programma non dovrebbe essere concesso di scrivere in aree di memoria che non siano variabili (a meno che si voglia programmare qualcosa di 'malizioso').

per l'errore in runtime è proprio il compilatore del linguaggio c che è piuttosto 'di manica larga' e lascia al programmatore l'onere di fare attenzione a quello che fà, in molti casi (quello più noto è la scrittura in array con sconfinamento dell'indice: il compilatore lo permette ma poi quando fai girare il programma dà errore, o addirittura crasha tutto il sistema operativo).

la cosa interessante da notare è che sulla stessa architettura, due compilatori c diversi generano codice macchina diversi...

__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family

26-02-2005 10:39
Click Here to See the Profile for UZI Click Here to See the Blog of UZI Click here to Send UZI a Private Message Find more posts by UZI Add UZI to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Voodoo
.grande:maestro.

User info:
Registered: Jan 2004
Posts: 1009 (0.13 al dì)
Location: Pisa
Corso: com. dig.
Anno: dottore :)
Time Online: 6 Days, 23:28:00: [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Beh,grazie ragazzi,sono veramente commosso per tutto l'interessamento dimostrato per quel programmino,quel "coso" innocente... :D
Mi avete reso un bambino felice :D :D :D

__________________
GET DROPBOX
# il grado di lentezza è direttamente proporzionale all'intensità della memoria;il grado di velocità è direttamente proporzionale all'intensità dell'oblio (Kundera) #
BLOG: Byte Strike
ChRiS :ciao:

28-02-2005 23:25
Click Here to See the Profile for Voodoo Click here to Send Voodoo a Private Message Visit Voodoo's homepage! Find more posts by Voodoo Add Voodoo to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 19:01.    Post New Thread    Post A Reply
Pages (2): « 1 [2]   Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.143 seconds (74.26% PHP - 25.74% MySQL) con 24 query.