Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
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: 2794
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


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Progettazione di chip grazie all'IA: da ...
Google aggiorna Gmail: copiare un codice...
Un attacco radio può intercettare...
Amazon dichiara guerra agli agenti AI: d...
Controller Wireless Xbox a 48,99€ invece...
Monitor ASUS TUF a 99€: Fast IPS da 24,5...
Google rompe una regola vecchia 15 anni ...
Internet Explorer non è ancora mo...
Moto Buds 2 crollano a 39,14€ invece di ...
I cheat valgono più di Call of Du...
7 smartphone in offerta su Amazon: Samsu...
Dreame L40 Ultra A costa 329€ su Amazon:...
AMD ha superato per la prima volta i 1.0...
Raspberry Pi: stop agli hack sulla RAM, ...
Più sottile di un capello, resist...
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: 08:43.


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