Newsgroup: it.comp.macintosh
Titolo: Re: gcc, lettura file e bus error

 
Ti è sfuggito il "&" in:
scanf("%d", &len);
Ciao,
Guido

 Sbaglio qualcosa io? 
concentrati qui

 piu' efficace.
:)
Occhio comunque che per qualche arcano motivo sotto OS X il "bus error" 
corrisponde spesso al "segmentation fault" di linux, con la differenza 
che non riesci a fargli produrre un core manco a pagarlo (ulimit -c 
unlimited NON funziona).
-- 
Jollino - 
http://www.nicolucci.net
Want a cool e-mail addy (@
ilovemac.info
, @
e-basta.info
 and others)?
Check out 
http://www.my-addy.info
, it's cheap!

 unlimited NON funziona).
Sarebbero due cose diverse se la mia memoria non mi inganna.
Segmentation Fault si ha quando  un puntatore "valido per la macchina"
punta ad  una zona della memoria  non allocata o comunque  al di fuori
dello spazio di indirizzamento valido.
Bus Error  si ha quando il puntatore  non e` valido per  la macchina e
l'hardware segnala  un errore sul  bus indirizzi. Si puo`  avere anche
per un  accesso non valido  per l'hardware all'interno di  un segmento
valido per il S.O.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico e fancazzista 
\/

 valido per il S.O.
Si`, ma entrambe le osservazioni sono vere: le architetture Intel-like
non hanno praticamente 'puntatori non validi per la macchina' mentre
quelle power si` (esigono indirizzi allineati) quindi un numero a caso
usato come indirizzo probabilmente produce bus error su PPC e
segmentation fault su intel (non e` tanto OSX vs Linux).
Il problema del core dump l'ho notato anch'io, ma non l'ho ancora ben
capito... sviluppando + che altro in Python no ho grossi problemi, ma
ogni tanto un file core potrebbe anche far comodo.
Alex

 ogni tanto un file core potrebbe anche far comodo.
Heh, mica tanto misterioso, basta guardare /etc/hostconfig:
##
# /etc/hostconfig
##
# This file is maintained by the system control panels
##
    [snippo]
DNSSERVER=-NO-
COREDUMPS=-NO-
VPNSERVER=-NO-
CRASHREPORTER=-YES-
Quel 'COREDUMPS=-NO-' dice tutto: il sistema tutto non fara` mai core
dump (fara` invece crash reports, vedi ultima riga).  Non mi e` ancora
chiarissimo perche` questo settaggio di sistema prenda precedenza su
quello "d'utente" fatto in bash, ma penso che si debba intervenire
anzitutto qui.  Non so con _quale_ "system control panel", pero`; e` il
tipo di file che a editarlo a mano si rischia di far danni...
Alex

 Sarebbero due cose diverse se la mia memoria non mi inganna.
Sarebbero due cose diverse, ma fatto sta che lo stesso codice che ha 
postato Yasumasa se lo lanci sotto linux x86 ti da segmentation fault (e 
ti spara pure un core se vuoi), sotto os X (ppc ovviamente) ti da bus 
error.


 tipo di file che a editarlo a mano si rischia di far danni...
Altro che impostare il browser di default! ;-))
-- 
http://www.dorelli.com
 - AIM: danmagma
In the shadow of the cargoes I take you one time
And we're counting all the numbers down to the waterline.

 panther) non han dato problemi
Intendi fatte a mano, editando il file di testo, non con qualche "system
control panel" come previsto nel commento del file stesso...?
Alex

 unlimited NON funziona).
Dato che non ho mai usato molto linux posso chiedere cosa mene faccio di
un core ? come lo utilizzo ?
Grazie
-- 
Ciao
Fabio

 un core ? come lo utilizzo ?
Ci fai un "debugging post mortem": usi (ad es.) gdb sul file di core, e
coi normali metodi del debugger esamini valori delle variabili, sequenze
di chiamate, ecc ecc, come se il programma fosse fermo ad un breakpoint
invece di essere deceduto.
Alex

 invece di essere deceduto.
in pratica è tipo l'autopsia.


 error.
Ripeto, le  cause sono diverse, l'effetto  e` in ogni  caso un segnale
non gestito  (sono due  segnali diversi ma  l'effetto e` lo  stesso) e
sotto Mac OS X e` inibita la generazione del core per evitare problemi
agli  utenti  meno  smaliziati   che  comunque  non  se  ne  farebbero
nulla. Alex ed  altri in questo thread parlano  di come riabilitare la
generazione del core dump.
Ho notato anche io che Mac OS  X manda un SIGBUS (aka bus error) anche
quando  dovrebbe, nelle  attese  del programmatore,  dare un  SIGSEGV,
potrebbe darsi che  ci siano aree di memoria read  only e questo causi
il SIGBUS quando le colpisci.
Con altri sistemi  operativi hai invece i due  segnali a seconda della
causa (SIGBUS  per un  puntatore non valido  per l'HW,  SIGSEGV quando
"esci dal seminato" della memoria allocata e scrivibile)
Le macchine  invece Intel (vedi  anche i post  di Alex) non  danno mai
SIGBUS dato che possono avere accessi allineati in qualsiasi modo alla
memoria.
