Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-09-2002, 20:04   #1
Maverick82^
Senior Member
 
L'Avatar di Maverick82^
 
Iscritto dal: Sep 2001
Città: Salerno
Messaggi: 649
Un piccolo aiuto per un piccolo problema in C

il codice è questo:

#include <stdio.h>
#define size 10

main()

{
int i=0;
int n[size];
for (i=0; i<=9;i++)
n[i]=i+2;
printf("%s%13s\n", "Element", "Value");
for(i=0; i<=9;i++)
printf("%7d%13d\n", i,n[i]);
return 0;
}

Vorrei poter inserire la dimensione dell'array attraverso il prompt con l'utente. Ho provato con una scanf prima della dichiarazione del vettore, ma il compilatore mi segnala errori. Cortesemente sapreste aiutarmi?? Grazie
__________________
Ho concluso positivamente con : yellope, simpon, angelomavino, EltricBlue, gridalo, fastez, irK, fabio536,Reiser Darkside, AMING, Mystik85
Maverick82^ è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2002, 20:57   #2
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
mi spiace, ma non puoi dichiarare un vettore di dimensione variabile in c.
se metti la dichiarazione dopo lo scanf non tutti i compilatori te la prendono per buona intanto (prima di tutto le dichiarazioni, poi le istruzioni) e di certo nessun compilatore accetterà un array la cui dimensione è specificata da una variabile.

se ti fa proprio comodo l'array ti consiglio di crearlo dinamicamente attraverso la malloc, allora si che potrai averlo della grandezza specificata dall'utente.

se non sai usare la malloc chiedi :-)
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2002, 22:24   #3
Gibbus
Senior Member
 
L'Avatar di Gibbus
 
Iscritto dal: Nov 2001
Messaggi: 1205
Esatto. Bisogna usare i puntatori, altrimenti nisba.
In pratica le dichiarazioni che dovrai fare saranno:

int N, *vettore;

/* Poi: */

printf("\n Inserire la dimensione dell'array: N=");
scanf("%d", &N);

vettore=(int *) malloc(N*sizeof(int));

La funzione malloc è supportata dalla libreria stdlib.h, cioè dovrai aggiungere in cima al file:
#include <stdlib.h>

Comunque ti consiglio di capire come funzionano i puntatori prima di addentrarti in queste istruzioni .
Gibbus è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 09:45   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da recoil
[b]di certo nessun compilatore accetterà un array la cui dimensione è specificata da una variabile.
Ma lo sai che al GCC gli va (o andava) bene ? Io non ci credevo...poi ho provato...

Codice:
void f(int N)
{
   int v[N];
}

main()
{
   f(10);
   f(15);
}
IMHO, anche se va, non è comunque corretto...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 15:17   #5
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
hai ragione tu, strano ma vero, gcc accetta un array di dimensioni variabili!
non ci avevo pensato ma in una funzione si può fare, cmq come dici giustamente anche tu non è molto corretto ed è in ogni caso preferibile usare la malloc (io la uso senza il cast esplicito ma ne abbiamo già parlato qualche settimana fa...)
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 22:02   #6
Maverick82^
Senior Member
 
L'Avatar di Maverick82^
 
Iscritto dal: Sep 2001
Città: Salerno
Messaggi: 649
Grazie a voi ho risolto
W i puntatori !!
__________________
Ho concluso positivamente con : yellope, simpon, angelomavino, EltricBlue, gridalo, fastez, irK, fabio536,Reiser Darkside, AMING, Mystik85
Maverick82^ è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 23:10   #7
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da recoil
[b]mi spiace, ma non puoi dichiarare un vettore di dimensione variabile in c.
se metti la dichiarazione dopo lo scanf non tutti i compilatori te la prendono per buona intanto (prima di tutto le dichiarazioni, poi le istruzioni) e di certo nessun compilatore accetterà un array la cui dimensione è specificata da una variabile.

se ti fa proprio comodo l'array ti consiglio di crearlo dinamicamente attraverso la malloc, allora si che potrai averlo della grandezza specificata dall'utente.

se non sai usare la malloc chiedi :-)
Ti sbagli. La dichiarazione di array variabili in C è possibile dal 99 con l'introduzione del nuovo standard C99, che a quanto ne so io, è quasi completo dalla maggior parte dei principali compilatori.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 23:14   #8
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da mjordan
[b]

Ehm, veramente la dichiarazione di array variabili in C è possibile dal 99 con l'introduzione del nuovo standard C99, che a quanto ne so io, è quasi completo dalla maggior parte dei principali compilatori.
Puoi quindi creare situazioni come la seguente rimanendo nello standard:

void
myfunc(int dim)
{
int myarray[dim];
...
...
return;
}

Quindi la situazione sopra è perfettamente corretta.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2002, 13:06   #9
Gibbus
Senior Member
 
L'Avatar di Gibbus
 
Iscritto dal: Nov 2001
Messaggi: 1205
Interessante... .

Però mi sa che i compilatori compatibili con quelle specifiche non faranno altro che utilizzare malloc, senza che il programmatore se ne accorga...!
Gibbus è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2002, 13:12   #10
Maverick82^
Senior Member
 
L'Avatar di Maverick82^
 
Iscritto dal: Sep 2001
Città: Salerno
Messaggi: 649
Quote:
Originariamente inviato da Gibbus
[b]Interessante... .

Però mi sa che i compilatori compatibili con quelle specifiche non faranno altro che utilizzare malloc, senza che il programmatore se ne accorga...!
...infatti!
__________________
Ho concluso positivamente con : yellope, simpon, angelomavino, EltricBlue, gridalo, fastez, irK, fabio536,Reiser Darkside, AMING, Mystik85
Maverick82^ è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2002, 14:00   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Gibbus
[b]Interessante... .

Però mi sa che i compilatori compatibili con quelle specifiche non faranno altro che utilizzare malloc, senza che il programmatore se ne accorga...!
No...sembra che, avendo il parametro di dimensione già inizializzato, usino l'allocazione standard per i vettori statici...

Quindi quello è a tutti gli effetti un vettore statico...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2002, 19:14   #12
Gibbus
Senior Member
 
L'Avatar di Gibbus
 
Iscritto dal: Nov 2001
Messaggi: 1205
Se è così, allora converrà continuare ad usare malloc (per fortuna...nel senso che ci sono affezionato...come molti, credo).

A proposito di dimensione di vettori "statici".
Una dichiarazione come questa, con un vettore nemmeno tanto grande:

int vettore[270000]; /* meno di 1 Mb */

manda in crash il programma non appena termina la compilazione...

Forse dipende dal compilatore che uso (Borland c/c++ 5.02)...
Oppure, non è che per caso c'è un limite di dimensione nei vettori statici?
Attendo lumi
Gibbus è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2002, 19:55   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma il compilatore genera codici a 32 bit ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2002, 06:49   #14
Gibbus
Senior Member
 
L'Avatar di Gibbus
 
Iscritto dal: Nov 2001
Messaggi: 1205
Certamente .
Ho notato altri difetti che riguardano sopratutto la deallocazione dinamica della memoria quando si lavora su liste concatenate molto grandi: relativamente a questo problema metterò fra una o due settimana un post apposito...penso che sia interessante.

Tornando agli array, cionci, tu, col tuo compilatore, riesci a dichiarare staticamente un vettore grande a piacere (nel limite dei 32 bit, si intende)?
Gibbus è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2002, 08:01   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Lo sai che è vero ?!?!?!
Il max che mi fa dichiarare in VC++ è : int vect[258572];
Comunque tutto deriva da qualche settaggio del compilatore... Ad esempio la grandezza dello heap...
Infatti rinominando il file in .c ed utilizzando così il compilatore C mi permette di dichiarare anche oltre il milione...
Inoltre mettendo la variabile come globale (non dovrebbe venire allocata nello heap)...funziona oltre il milione anche in C++...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2002, 10:38   #16
Gibbus
Senior Member
 
L'Avatar di Gibbus
 
Iscritto dal: Nov 2001
Messaggi: 1205
Ho cambiato l'estensione, da .cpp a .c...niente, non compila... .

Ho controllato se ci fosse qualche parametro da configurare, ma nulla.
Comunque mi sembra di capire che il comportamento è normale.
Grazie delle info .
Gibbus è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2002, 13:07   #17
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
io ho provato a fare questa cosa degli array in visual c++.
se lo creo come variabile globale (estensione del file cpp) posso mettere la dimensione che voglio, ma non mi accetta assolutamente un array di dimensioni specificate da una variabile, forse perché è un po' troppo vecchio (è il VC++ 4, con il compilatore della gnu non ci sono problemi).

cmq, non si finisce mai di imparare
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2002, 13:24   #18
Gibbus
Senior Member
 
L'Avatar di Gibbus
 
Iscritto dal: Nov 2001
Messaggi: 1205
Mi ero dimenticato di provare un array globale .
In effetti con un array globale le cose migliorano, si arriva oltre il milione di elementi, come diceva cionci.
Comunque, quando si rifiuta di compilare, questa volta il compilatore dà delle indicazioni.

Fatal: Fatal: Assertion failed: !"How can you expand a vapor heap?" at "LMEM.C", line 1014
Fatal: Fatal: Assertion failed: prev->size <= vHeap->maxSize at "LMEM.C", line 1630
Fatal: Fatal: Assertion failed: free->size <= vHeap->maxSize at "LMEM.C", line 1221
Fatal: Fatal: Assertion failed: memHndl->size <= vHeap->maxSize at "LMEM.C", line 1156
Error: Error: Internal failure -- retrying link...
Fatal: Fatal: Assertion failed: !"How can you expand a vapor heap?" at "LMEM.C", line 1014
Fatal: Fatal: Assertion failed: prev->size <= vHeap->maxSize at "LMEM.C", line 1630
Fatal: Fatal: Assertion failed: free->size <= vHeap->maxSize at "LMEM.C", line 1221
Fatal: Fatal: Assertion failed: memHndl->size <= vHeap->maxSize at "LMEM.C", line 1156

Sembrerebbe che nel file LMEM.C si possano modificare i valori di alcune costanti...
Ma questo file, nel mio hard disk, non esiste, sempre che di file si tratti...
Gibbus è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2002, 14:11   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Comunque vedi...il problema è lo heap...

Probabilmente LMEM.C è già compilato nelle librerie runtime del Borland e le asserzioni vengono intercettate (con i relativi) messaggi dal compialtore...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Colpo al 'pezzotto': smantellato il 70% ...
Tineco FLOOR ONE i6 Stretch a soli 299€ ...
Denodo presenta la versione 9.3 della su...
Stati Uniti, attivata la prima batteria ...
Xpeng si espande in Europa: debutto in 5...
Robot aspirapolvere in offerta su Amazon...
Rilasciato finalmente Windows ML: come c...
Dreame lancia il guanto di sfida a Rolls...
Il sistema di assistenza alla mira che d...
Virtua Fighter, il nuovo combat system s...
Snapdragon X2 Elite Extreme, dettagli su...
Microsoft risponde alle accuse: bloccati...
ChatGPT Pulse trasforma l'assistente AI:...
Microsoft lancia il nuovo Marketplace pe...
HUMAIN Horizon Pro: il notebook enterpri...
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:25.


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