Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Con un semplice dialogo in linguaggio naturale e la potenza di una scheda video di fascia alta è possibile costruire software funzionante da zero, senza scrivere una riga di codice e senza inviare un solo byte dei propri dati a server esterni
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-04-2005, 17:46   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
[C] Problema puntatori

Ciao, ho fatto un semplice programma che alloca dinamicamente un array di 100 interi, poi vorrei riempire questo array con un ciclo for ma qualcosa non funziona bene ed è come se mi inizializzasse a 0 solo il rpimo elemento (e quindi tutto l'array risulta essere inizializzato a 0)...mi sà che c'è qualcosa che non và nell'aritmetica dei puntatori ma non capisco cosa...

#include <stdlib.h>
#include <stdio.h>

/* Non riceve alcun parametro ed emette un puntatore a float */
int * get_mem(void);

int main(void){

int i;
int *puntatore; // Puntatore al primo valore float dell'array allocato

/* Alloca la memoria dinamicamente e metti il valore del puntatore uscente
dalla funzione get_mem nellaa variabile puntatore */

puntatore = get_mem();
printf("%p\n", puntatore);

for(i=0; i<=100; i++){
*(puntatore + i) = i; // Inizializza l'array con il valore di i
}

printf("\n%d\n", puntatore[0]);
printf("\n%d\n", puntatore[1]);
printf("\n%d\n", puntatore[2]);

system("PAUSE");
return 0;
}

/* La funzione get_mem non riceve alcun parametro in ingresso e restituisce un
puntatore al primo valore di tipo float dell'array di 100 elementi allocato
dinamicamente */

int *get_mem(void){

int *p; // Puntatore al primo elemento di tipo float dell'array

/* Alloca memoria per un array di 100 elementi di tipo float */
p = calloc(100, sizeof(int));

if(!p){ // Se calloc restituisce un puntatore NULL
printf("Errore di allocazione della memoria\n");
exit(1);
}
return p;
}
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:14   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da D4rkAng3l
for(i=0; i<=100; i++){
*(puntatore + i) = i; // Inizializza l'array con il valore di i
}
Quella la puoi sostituire con:
Codice:
for (i = 0; i < 100; i++)
{
  puntatore[i] = i;   // Inizializza l'array con il valore di i
}
E fai attenzione: tu hai scritto "<= 100", non "< 100", ma in quel modo provi ad inizializzare 101 elementi dell'array, non 100 (da e compreso lo zero, fino a 100 incluso).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:22   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
Quote:
Originariamente inviato da DanieleC88
Quella la puoi sostituire con:
Codice:
for (i = 0; i < 100; i++)
{
  puntatore[i] = i;   // Inizializza l'array con il valore di i
}
E fai attenzione: tu hai scritto "<= 100", non "< 100", ma in quel modo provi ad inizializzare 101 elementi dell'array, non 100 (da e compreso lo zero, fino a 100 incluso).
ah ok grazie, però volevo fare un po' di prove proprio sull'aritmetica dei puntatori...mi ricordo che al corso di asm dato un vettore lo incrementavamo a mano con i puntatori...come posso fare questa cosa in C?

per il <= mi impappino sempre perchè non mi ricordo mai se l'ho fatto partire da 0 o da 1 mentre scrivo
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:33   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Strano , dovrebbe funzionare ....(a me funziona)

Che sia un bug del compilatore?

Prova a dichiarare la variabile "i" come "volatile" e vedi che succede.

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:40   #5
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
cioè a te funziona il mio codice?compilare me lo compila però mi inizializza tutto il vettore a 0....

che vuol dire dichiarala come volatile?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:41   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da AnonimoVeneziano
Prova a dichiarare la variabile "i" come "volatile" e vedi che succede.
Sicuro che possa aiutare?

@D4rkAng3l: non ho ben capito cosa mi hai chiesto.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:42   #7
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da D4rkAng3l
cioè a te funziona il mio codice?compilare me lo compila però mi inizializza tutto il vettore a 0....

che vuol dire dichiarala come volatile?
Si , il tuo codice a me funziona perfettamente (tralasciando il <= )

Che compilatore usi?

Dichiarare la variabile come "volatile" intendo che invece di dichiarare "i" come :

int i;

di dichararla come :

volatile int i;

Dovrebbe bypassare eventuali ottimizzazioni buggate eseguite dal tuo compilatore (se il problema è effettivamente il compilatore) .

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:44   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da DanieleC88
Sicuro che possa aiutare?

@D4rkAng3l: non ho ben capito cosa mi hai chiesto.

Beh, se è un bug riguardante l' ottimizzazione della lettura dalla memoria del compilatore potrebbe aiutare

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:45   #9
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
il compilatore è il dev c++ sotto win...
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 18:52   #10
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
cazzarola dichiarandola volatile funziona !!! e provando col codice originale con un altro compilatore funziona...ma il dev c++ non dovrebbe essere uno dei migliori?
in che modo hai capito che era proprio la variabile i a dare problemi e a dover essere dichairata come volatile?

cmq grazie mille...che rosicata però...tempo sprecato per uno stupido compilatore
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 19:39   #11
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Si , allora è proprio un bug del compilatore .

I compilatori tendono a ottimizzare l'accesso alla memoria evitando di leggere una variabile + volte dalla memoria se questa non è stata modificata . "volatile" impone al compilatore di generare codice che rilegga la variabile ogni volta dalla memoria evitando tali ottimizzazioni .

Se nel compilatore c'è un bug relativo a tali ottimizzazioni (e quindi il compilatore non si accorge che la variabile in questione verrà modificata alla fine di ogni ciclo FOR e che sarà perciò necessario rileggerla anzichè riutilizzare il valore salvato nei registri che nel tuo caso era "0") con "volatile" lo si può bypassare, comunque se la versione di Dev C++ che stai usando non è una versione beta o development ma quella considerata stabile io farei un bug report ai programmatori.

Ciao
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 28-04-2005 alle 19:41.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 19:41   #12
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
si infatti ci avevo pensato anche io di farglielo sapere, che figata il mio primo bug trovato
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 21:02   #13
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
devc++ usa gcc come compilatore. chissà se questo presunto bug sia presente per le versioni su tutte le piattaforme. io ricordo di aver fatto degli esempi del genere con devc++ ma non mi sembra di aver incontrato degli errori.

cmq x darkangel:
come ha detto danielec88 nel ciclo for inizializza i=1 oppure fai il controllo i<100 e non i<=100 perchè la 101esima volta vai a scrivere su una zona di memoria non allocata. fai questa correzione e poi rimanda in esecuzione il programma e vedi cosa succede.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 21:38   #14
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
Quote:
Originariamente inviato da VegetaSSJ5
devc++ usa gcc come compilatore. chissà se questo presunto bug sia presente per le versioni su tutte le piattaforme. io ricordo di aver fatto degli esempi del genere con devc++ ma non mi sembra di aver incontrato degli errori.

cmq x darkangel:
come ha detto danielec88 nel ciclo for inizializza i=1 oppure fai il controllo i<100 e non i<=100 perchè la 101esima volta vai a scrivere su una zona di memoria non allocata. fai questa correzione e poi rimanda in esecuzione il programma e vedi cosa succede.
mmm si proverò, però errore logico a parte (quello del <=) col djgcc funziona perfettamente e poi a rigor di logica lui dovrebbe cmq eseguire il ciclo e scrivere il valore corrente di i in ogni zona dell'array allocato dinamicamente e poi dovrebbe sbroccare dopo quando và a scrivere in una zona di memoria non allocata e invece il dev c++ se non imposto la variabile come volatile mette uno 0 in ogni locazione dell'array...poi cmq proverò, magari il compilatore è fatto in modo tale da impostare tutte le locazioni a 0 se c'è qualcosa che non và...anche se mi sembra strano, non ci capisco molto ma da quello che sò i compilatori dovrebbero soloe seguire controlli sintattici e non logici....
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 21:49   #15
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
per fare un po' di debug prova a mettere la printf proprio nel ciclo for...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2005, 22:28   #16
Ubi-Wan
Bannato
 
L'Avatar di Ubi-Wan
 
Iscritto dal: Jul 2004
Città: Tatooine
Messaggi: 506
Quote:
Originariamente inviato da DanieleC88
Quella la puoi sostituire con:
Codice:
for (i = 0; i < 100; i++)
{
  puntatore[i] = i;   // Inizializza l'array con il valore di i
}
E fai attenzione: tu hai scritto "<= 100", non "< 100", ma in quel modo provi ad inizializzare 101 elementi dell'array, non 100 (da e compreso lo zero, fino a 100 incluso).

Io preferisco invece l'aumento del puntatore *(p + i) = i (a parte l'errore del <=). Mi ricordo che faccio cosi' da quando a proposito di cio' il mio professore di Informatica I disse che se sulle tastiere non ci fossero le parentesi quadre tutti scriverebbero codice migliore
Ubi-Wan è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2005, 14:28   #17
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Comunque su WinXP ho provato a installare Dev-C++ ultima versione ( 4.9.9.2 ) e il problema non c'è.

Te quale usi?

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2005, 14:30   #18
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
dice solo Dev C++ 4
mi sà che non è aggiornatissima...ora scaricherò anche io l'ultima versione
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2005, 15:39   #19
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Si, è una versione vecchia, scarica l'ultima

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2005, 23:35   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
guardate che scaricando l'ultima versione non risolvete nulla: gli sviluppatori del dev-c++ si occupano solo dell'ide (che tra l'altro è una porcheria immonda), il problema (se davvero c'è) è del porting per windows del gcc!!!
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
SpaceX potrebbe aver cambiato i piani pe...
Xbox Game Pass, ecco i giochi in arrivo ...
Chery chiude il primo semestre 2026 con ...
Anthropic supera OpenAI nei ricavi a poc...
Un malware Android trafuga i dati anche ...
GrapheneOS accusa Google di aver complic...
Unitree: il robot Superman tocca 12,66 m...
Samsung rincara i wafer fino al 15%, all...
Etched, la startup dei chip per l’infere...
Internet all'estero spendendo meno: i pi...
Mutiny, nuovo film con Jason Statham esc...
GTA 6 vale due anni di ferma: l'Esercito...
Stripe si prende il più grande ro...
Seasonic Prime Enterprise RX-1600: 95% d...
Linux 7.3 abilita i Mac M3 di fascia alt...
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: 01:18.


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