Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-05-2009, 18:03   #1
Tel Mark
Member
 
L'Avatar di Tel Mark
 
Iscritto dal: Nov 2007
Città: Milano
Messaggi: 145
[c] bus error inaspettato

questo è un pezzo di codice:

lab = (int **)malloc(sizeof(int *) * righe);
for (i = 0; i <righe; i++)
lab[i] = (int *)malloc(sizeof(int) * colonne);

for(i=0; i<righe; i++) {
for(j=0; j<colonne; j++) {
scanf("%d", &lab[i][j]);}}

lancio il programma con dei valori da inserire nella mia matrice lab in buffer, non riesco a capire come mai dopo l'ultimo valore inserito, quindi a lab[righe-1][colonne-1] ottengo bus error. Ho fatto diverse prove inserendo varie printf qua e la nel codice, e l'errore sta proprio alla fine della scanf. boh

Ultima modifica di Tel Mark : 22-05-2009 alle 19:46.
Tel Mark è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2009, 18:06   #2
Energy++
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1060
comunque questo non è c#
Energy++ è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2009, 19:01   #3
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Gia'. E' C.

Come e' dichiarata la matrice lab?
Inoltre dovresti controllare i valori di ritorno della Malloc, che nel caso restituisse NULL significherebbe errore nell'allcazione di memoria.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2009, 19:47   #4
Tel Mark
Member
 
L'Avatar di Tel Mark
 
Iscritto dal: Nov 2007
Città: Milano
Messaggi: 145
corretto l'errore nel titolo chiedo venia

la matricè è int **lab
Tel Mark è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2009, 23:50   #5
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
per sicurezza la scanf scrivila cosi: scanf("%d", &(lab[i][j]))
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2009, 23:53   #6
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da fero86 Guarda i messaggi
per sicurezza la scanf scrivila cosi: scanf("%d", &(lab[i][j]))
Spero proprio non usi un compilatore che viola la precedenza degli operatori.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 00:45   #7
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Spero proprio non usi un compilatore che viola la precedenza degli operatori.
con gli operatori unari io c'ho sempre il dubbio
per esempio, qual é il risultato ufficialmente definito dallo standard di questa espressione?
Codice:
char n = 1;
return !~n;
e di questa?
Codice:
char n = 1;
return ~!n;
ed inoltre... definito da quale standard? vale lo stesso per tutti, compresi quelli del C++?
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 01:12   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da fero86 Guarda i messaggi
con gli operatori unari io c'ho sempre il dubbio
per esempio, qual é il risultato ufficialmente definito dallo standard di questa espressione?
Codice:
char n = 1;
return !~n;
e di questa?
Codice:
char n = 1;
return ~!n;
ed inoltre... definito da quale standard? vale lo stesso per tutti, compresi quelli del C++?
Sceglierei un altro esempio perchè quelli sono operatori unari e a meno che non ci sia il complemento dell'operatore negazione o la negazione dell'operatore complemento direi che solo la più fantasiosa delle implementazione possa fare qualcosa di diverso dall'evidente.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 02:13   #9
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da fero86 Guarda i messaggi
con gli operatori unari io c'ho sempre il dubbio
& sta un "piano" sotto a [].
! e ~ invece sono sulo stesso "piano", per il quale vale l'ordine di lettura da destra.
Non so in quale standard siano definite precedenza/ordine, ma se fai una ricerca con google vedrai che i risultati sono sempre quelli (si trovano anche alcuni esempi di ambiguità).
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 04:49   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Tel Mark Guarda i messaggi
questo è un pezzo di codice:

lab = (int **)malloc(sizeof(int *) * righe);
for (i = 0; i <righe; i++)
lab[i] = (int *)malloc(sizeof(int) * colonne);

for(i=0; i<righe; i++) {
for(j=0; j<colonne; j++) {
scanf("%d", &lab[i][j]);}}

lancio il programma con dei valori da inserire nella mia matrice lab in buffer, non riesco a capire come mai dopo l'ultimo valore inserito, quindi a lab[righe-1][colonne-1] ottengo bus error. Ho fatto diverse prove inserendo varie printf qua e la nel codice, e l'errore sta proprio alla fine della scanf. boh
Ciao
1 - come ti ha detto gugoXX, occorre fare il controllo sul risultato della malloc(). In azienda, per esempio, consideriamo il mancato controllo un errore grave (blind faith).

2 - Hai un debugger? Se proprio non riesci a trovare l'errore potresti stampare l'indirizzo &lab[i][j]. Su una singola riga dovrebbe andare di 4 in 4, no?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 10:36   #11
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Sceglierei un altro esempio perchè quelli sono operatori unari e a meno che non ci sia il complemento dell'operatore negazione o la negazione dell'operatore complemento direi che solo la più fantasiosa delle implementazione possa fare qualcosa di diverso dall'evidente.
e l'evidente in questo caso sarebbe?


Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
& sta un "piano" sotto a [].
! e ~ invece sono sulo stesso "piano", per il quale vale l'ordine di lettura da destra.
e come funziona invece per gli operatori unari che stanno "sullo stesso piano" ma su due lati diversi dell'operando? per esempio in che ordine vengono eseguiti gli operatori nell'espressione "++n++"?
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 11:45   #12
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da fero86 Guarda i messaggi
e come funziona invece per gli operatori unari che stanno "sullo stesso piano" ma su due lati diversi dell'operando? per esempio in che ordine vengono eseguiti gli operatori nell'espressione "++n++"?
L'espressione non ha senso perché non si può applicare l'operatore d'incremento ad una rvalue (il risultato del primo incremento).
Edit: comunque l'operatore postfisso e quello prefisso sono su livelli diversi.

Ultima modifica di ||ElChE||88 : 23-05-2009 alle 11:49.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2009, 14:45   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da fero86 Guarda i messaggi
e l'evidente in questo caso sarebbe?
Sia che la valutazione avvenga da sinistra verso destra, sia che avvenga da destra verso sinistra, comunque deve prima fare il complemento e poi la negazione nel primo caso e prima la negazione e poi il complemento nel secondo.

Quote:
e come funziona invece per gli operatori unari che stanno "sullo stesso piano" ma su due lati diversi dell'operando? per esempio in che ordine vengono eseguiti gli operatori nell'espressione "++n++"?
L'incremento postfisso ha precedenza maggiore dell'incremento prefisso nello standard ISO IEC 9899:1999 (il C99). Le specifiche del C99 si possono scaricare da wikipedia (la terza revisione, sembra che ce ne sia anche una quarta).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
È il momento migliore per comprar...
Svendita MacBook Pro: c'è il mode...
Oggi questa TV TCL QLED da 43 pollici co...
Il caricatore multiplo da 200W che va be...
Top 7 Amazon, il meglio del meglio di qu...
Spento lo strumento LECP della sonda spa...
Voyager Technologies ha siglato un accor...
GoPro annuncia la linea MISSION 1 con tr...
Alcune varianti dei futuri Samsung Galax...
Il ridimensionamento di OnePlus in Europ...
Il cofondatore di Netflix ha lasciato l'...
ASUS porta in Italia il nuovo Zenbook Du...
Assassin's Creed: Black Flag Resynced, s...
Xbox Game Pass cambierà: tra le n...
I nuovi Surface Pro e Laptop sono vicini...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v