Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-04-2010, 18:24   #1
badboy-j
Member
 
Iscritto dal: Jan 2008
Messaggi: 107
Problema variabile in C

Salve, la mia domanda è semplice e per molti di voi sembrerà deficiente:


Quote:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
srand(time(NULL));
int vet[1000];
int count[12]={0};
int i, x=0;
printf("%d\n", x);
for(i=0; i<1000; i++){
vet[i]= (1+rand()%6) + (1+rand()%6);
count[vet[i]]++;
}
printf("%d\n", x);
return 0;
}
perchè il valore della x cambia dopo il for? Se invece elimino la riga dove modifico il vettore count[] resta invariato. Per quale motivo?
badboy-j è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2010, 19:02   #2
Darecon
Senior Member
 
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
Va che a me non si modifica niente., 0 era prima e 0 rimane dopo..

Minigw su wxp 32 bit..
Darecon è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2010, 19:05   #3
badboy-j
Member
 
Iscritto dal: Jan 2008
Messaggi: 107
perchè allora a me da sempre dei valori diversi??? Il primo è sempre 0 e l'altro cambia sempre, tipo 27, 32, 30... uso Ubuntu...
badboy-j è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2010, 20:45   #4
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
ma.... a che serve stampare 2 volte un valore inizializzato a 0 prima e dopo un ciclo ?

nemmeno a me modifica nulla...

gcc 4.2 su ubuntu e osx
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2010, 20:58   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Prova ad inizializzare il vettore count in un altro modo, io quel metodo non l'avevo mai visto (l'avevo visto per inizializzare singolarmente i vari elementi del vettore, e contemporaneamente definirne la quantità, non per inizializzarli tutti).
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2010, 21:03   #6
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
ma il debug cosa dice? Debuggando trovi il problema, se c'è un problema...
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2010, 21:06   #7
CountDown_0
Senior Member
 
Iscritto dal: Dec 2004
Città: Milano
Messaggi: 331
Attento, l'istruzione
Quote:
(1+rand()%6)
genera un risultato da 1 a 6, perché rand()%6 è tra 0 e 5. Quindi se hai che
Quote:
vet[i]= (1+rand()%6) + (1+rand()%6);
vet[i] può valere da 2 a 12. Quindi count[0] e count[1] non vengono mai toccati, ma è possibile che venga scritto qualcosa in count[12], che è fuori dai limiti dell'array, perché se ha dimensione 12 vuol dire che va da 0 a 11!

Se non dà un segmentation fault probabilmente è perché l'indirizzo di memoria successivo a rand[11] è usato dallo stesso programma, e probabilmente x va a finire proprio lì e viene sovrascritto in qualche modo. Ecco perché viene modificato. Quelli che non hanno problemi, invece, probabilmente è perché o non è mai uscito il numero 12 sommando i 2 termini casuali (improbabile, avviene con probabilità 1/36, su 1000 numeri dovrebbe capitare un sacco di volte), oppure perché in quell'indirizzo di memoria è stato messo qualcos'altro, e quindi l'errore c'è ma non si vede. Magari viene sovrascritta la i, e quindi il loro ciclo viene eseguito di fatto più o meno di 1000 volte.
__________________
Elrond sul forum di TGM
CountDown_0 è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2010, 09:29   #8
badboy-j
Member
 
Iscritto dal: Jan 2008
Messaggi: 107
Quote:
Originariamente inviato da CountDown_0 Guarda i messaggi
vet[i] può valere da 2 a 12. Quindi count[0] e count[1] non vengono mai toccati, ma è possibile che venga scritto qualcosa in count[12], che è fuori dai limiti dell'array, perché se ha dimensione 12 vuol dire che va da 0 a 11!

Se non dà un segmentation fault probabilmente è perché l'indirizzo di memoria successivo a rand[11] è usato dallo stesso programma, e probabilmente x va a finire proprio lì e viene sovrascritto in qualche modo. Ecco perché viene modificato.
Sei un grande!!!!!! Era quello il problema, ma non me n'ero accorto... il valore di vet[12] (che in realtà non esisteva) è lo stesso che mi assegnava ad x. Però non dovrebbe avvertirmi che sta andando a sovrascrivere una porzione di memoria assegnata ad un'altra variabile? Grazie ancora!
badboy-j è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2010, 09:41   #9
CountDown_0
Senior Member
 
Iscritto dal: Dec 2004
Città: Milano
Messaggi: 331
Purtroppo no, il C non ti avverte. O l'indirizzo errato è fuori dallo spazio di memoria del programma, e allora interviene il sistema operativo a bloccarti con un segmentation fault, oppure non ti dà nessun errore. Quando si dice che il C è molto potente ma lo scotto da pagare è che è facile sbagliare, si intende proprio questo.

Ciao!
__________________
Elrond sul forum di TGM
CountDown_0 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Blackwell Ultra: fino al 45% di prestazi...
Neuralink: 12 pazienti hanno usato l'imp...
Amazon sorprende tutti oggi: valanga di ...
A19 e A19 Pro: Apple svela le differenze...
NASA: inizia l'esperimento CHAPEA per si...
DAZN rischia sanzioni milionarie per pub...
Invasione di gamer a Montecatini Terme: ...
Streaming musicale con qualità da...
Von der Leyen spinge sull'IA europea: fo...
Tesla mette in vendita la tecnologia Sup...
La costruzione del drone della missione ...
iPhone 17: Apple introdurrà fin d...
Primo collegamento laser aereo-satellite...
Nintendo non risparmia nessuno: condanna...
Nuove accuse per Meta: le ricerche sull'...
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: 14:33.


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