Newsgroup: it.comp.lang.c
Titolo: tarda ora, errore runtime, scemenza -spero-

Salve,
purtroppo, immagino a causa della tarda ora :-P, non mi riesce di far 
funzionare un programma al quale sto lavorando..
Cioč, la compilazione avviene in modo corretto, ma ottengo un errore a 
run time, in particolare un Segmentation fault, quando invoco la 
funzione che inizia cosģ:
void ComputeExpr (void)
{
   char *espress;
   ExpressionTree * Expr;
   float *ptr;
   printf ("Inserisci espressione (senza spazi):\n");
/*^^^^^^^^^QUESTA SOPRA VIENE ESEGUITA ed č l'ultimo output che viene 
visualizzato*/
   scanf ("%s", espress);
   printf ("espressione: %s", espress);
/*^^^^^^QUESTA NO, quindi l'errore č qui o nell'istruzione precedente*/
   SyntaxError = 0;
   Expr = BuildExpressionTree (espress, strlen (espress));
   [........continua.....]
}
E' chiaro che sto commettendo un errore con il puntatore espress, ma 
vuoi x l'ora, vuoi che oggi č il primo dell'anno e porto i postumi della 
serata di ieri, non riesco proprio a correggerlo.. AIUTATEMI!!! :-)
ciao
PS. Immagino che mi dovrņ sotterrare quando capirņ xchč non funziona!!

   scanf ("%s", espress);
Non ho ancora smaltito tutto l'alcool di ieri, ma direi che scrivi su un
puntatore non inizializzato.
- Usa char espress[MAX_LEN]
- Usa char *espress = malloc(len)
ciao
Kronos
PS: buon anno a tutti
-- 
Home: 
http://kronoz.cjb.net
"Sei l'unica donna della mia vita".
(Adamo)

Kronos wrote:
 > Non ho ancora smaltito tutto l'alcool di ieri, ma direi che scrivi su un
 > puntatore non inizializzato.
 >
 > - Usa char espress[MAX_LEN]
 > - Usa char *espress = malloc(len)
Entrambe le soluzioni che proponi non mi eliminano il segmentation 
fault. Comunque in teoria dovrebbe funzionare nel modo che ho utilizzato 
nell'esempio, altrimenti questo programma stupido che riporto qua in 
basso non dovrebbe funzionarmi, e invece va che č una meraviglia!!
#include <stdio.h>
int main()
{
   char *prova;
   printf("\n\nProva:\n");
   scanf ("%s", prova);
   printf("\n\n*****=%s\n", prova);
}
Perchč?? Dove sbaglio?? Mi sto disperando.. :-(
grazie
ciao

basso non dovrebbe funzionarmi, e invece va che è una meraviglia!!
Stai commettendo un errore di logica gravissimo:
se un programma non si comporta come ti aspetti
allora c'e' un errore, ma se un programma si comporta
come ti aspetti NON SIGNIFICA che non ci sono errori.
Commettere un errore di logica su questo punto e' grave
in generale, ma e' mille volte piu' grave se programmi
in C++ in cui quando commetti degli errori le regole del
linguaggio C++ dicono che puo' succedere QUALUNQUE COSA.
Quando sei *fortunato* questo "qualunque cosa" si
traduce in un crash, quando sei sfortunato questo
"qualunque cosa" si traduce in un nulla di visibile
e ottieni un programma che SEMBRA funzionare.
HTH
Andrea

 }
Questo sicuramente funziona per caso, dal momento che con scanf vai a scrivere su un'area di memoria
non allocata.. probabilmente non ti da seg fault per via della sua brevità (mai sentito parlare di
undefined behaviour?;-).
Ciao,
Cecco

 undefined behaviour?;-).
Ooops!!!
Ehm.. si vede che è un po' che non scrivevo più in c... Mi sembrava che 
scanf allocasse da sola la memoria necessaria..
eheheh :-D
Grazie a tutti per l'help

basso non dovrebbe funzionarmi, e invece va che è una meraviglia!!
ah si ?
[root@pollon luca]# make test
cc     test.c   -o test
[root@pollon luca]# ./test
Prova:
ciao
Segmentation fault
Il problema è che scrivi su una zona di memoria non allocata... e
quindi il funzionamento è casuale
-- 
Per una pera, una pera cazzo...