Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
La nuova fotocamera compatta DJI spicca per l'abbinamento ideale tra le dimensioni ridotte e la qualità d'immagine. Può essere installata in punti di ripresa difficilmente utilizzabili con le tipiche action camera, grazie ad una struttura modulare con modulo ripresa e base con schermo che possono essere scollegati tra di loro. Un prodotto ideale per chi fa riprese sportive, da avere sempre tra le mani
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-09-2008, 09:30   #1
supernovae
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 24
[C++]array dinamici

ciao a tutti, ho un problema con la definizione di array allocati dinamicamente.
In pratica ho una classe che ha nei campi privati un array di puntatori ad oggetti ed un intero che dovrebbe essere la dimensione di tale array.
in alcune funzioni ho bisogno di aggiungere oggetti all'array ma se provo a farlo senza riallocare l'array mi da un errore di segmentazione.
Non posso fare neanche una cosa del genere:
es
class x
{.......}
class y
{......
private:
x* array;
int dim;
};

funz()
{....
x=new y[dim];
}
dato che la classe y non ha un costruttore di default

come posso riallocare nuova memoria per l'array
supernovae è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 10:18   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Ma usare vector no?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 10:44   #3
supernovae
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 24
con i vector l'ho gia fatto, volevo provarlo a fare con gli array dinamici
supernovae è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 10:51   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da supernovae Guarda i messaggi
con i vector l'ho gia fatto, volevo provarlo a fare con gli array dinamici
Allora devi implementarti una lista, con le operazioni di ricerca, inserimento e cancellazione. E' il modo corretto di creare un insieme di elementi ridimensionabile a piacere (che è quello che vuoi te)
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 12:14   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Allora devi implementarti una lista, con le operazioni di ricerca, inserimento e cancellazione. E' il modo corretto di creare un insieme di elementi ridimensionabile a piacere (che è quello che vuoi te)
no, è il modo corretto di implementare un multinsieme ordinato di elementi ridimensionabile in tempo costante ma con tempo di accesso lineare.

gli array sono molto diversi dalle liste: se vuole ammortizzare il tempo di ridimensionamento di un array può usare algoritmi particolari (es: raddoppiare la dimensione fisica ad ogni "sforamento" anziché incrementarla solo di 1).

tuttavia la domanda non era a carattere algoritmico: non si è capito cosa stia chiedendo supernovae, anche perché il codice che ha riportato è sbagliato (assegna un puntatore y* al nome di un tipo, "x", non ha senso).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 14:01   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 71104 Guarda i messaggi
no, è il modo corretto di implementare un multinsieme ordinato di elementi ridimensionabile in tempo costante ma con tempo di accesso lineare.
Spiegami quale tra multiinsieme e ordinato non si applica anche alla definizione di array.
Poi chi ha detto che l'accesso ad una lista debba essere lineare?
Puoi sempre usare strutture d'appoggio e ridurre il costo di accesso.
In più hai la possibilità di rimuovere o inserire in mezzo all'insieme cosa che con l'array (e vector) non fai con la stessa efficienza.

Quote:
gli array sono molto diversi dalle liste: se vuole ammortizzare il tempo di ridimensionamento di un array può usare algoritmi particolari (es: raddoppiare la dimensione fisica ad ogni "sforamento" anziché incrementarla solo di 1).
In pratica reimplementa vector.
Avendo scartato vector pensavo cercasse di implementare una alternativa.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 14:15   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Spiegami quale tra multiinsieme e ordinato non si applica anche alla definizione di array.
ho mai sostenuto una cosa del genere?


Quote:
Poi chi ha detto che l'accesso ad una lista debba essere lineare?
Puoi sempre usare strutture d'appoggio e ridurre il costo di accesso.
come ad esempio un array


Quote:
In più hai la possibilità di rimuovere o inserire in mezzo all'insieme cosa che con l'array (e vector) non fai con la stessa efficienza.
si ma non è che i doni ti scendono dal cielo: se usi una lista il tempo di accesso è lineare; se usi un array il tempo di accesso è costante ma è lineare quello di inserzione. se li usi entrambi hai le limitazioni di entrambi

ora non mi venire a blaterare di dizionari, hash tables, alberi di ricerca, alberi RB... queste cose le sappiamo tutti, ma a supernovae non gliene frega un cavolo: lui ha un problema molto banale col C++ che gli altri stentano a capire, ma non è un problema algoritmico
probabilmente non deve neanche realizzare un programma efficiente, sta solo facendo qualche esperimento didattico.


Quote:
In pratica reimplementa vector.
è lui che vuole farsi male, mica io.

Quote:
Avendo scartato vector pensavo cercasse di implementare una alternativa.
te l'ha anche detto qual è l'alternativa:
Quote:
Originariamente inviato da supernovae Guarda i messaggi
con i vector l'ho gia fatto, volevo provarlo a fare con gli array dinamici
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 14:17   #8
supernovae
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 24
Quote:
Originariamente inviato da 71104 Guarda i messaggi
tuttavia la domanda non era a carattere algoritmico: non si è capito cosa stia chiedendo supernovae, anche perché il codice che ha riportato è sbagliato (assegna un puntatore y* al nome di un tipo, "x", non ha senso).
con quello che ho scritto volevo indicare una classe che ha come campo privato un array di puntatori ad oggetti del tipo x con dimensione variabile.
supernovae è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 14:18   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da supernovae Guarda i messaggi
con quello che ho scritto volevo indicare una classe che ha come campo privato un array di puntatori ad oggetti del tipo x con dimensione variabile.
non faresti prima a scrivere un codice corretto così capiamo tutti?
esemplificativo ma corretto.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 14:24   #10
supernovae
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 24
Quote:
Originariamente inviato da 71104 Guarda i messaggi
probabilmente non deve neanche realizzare un programma efficiente, sta solo facendo qualche esperimento didattico.
si hai ragione, sto semplicemente provando a svolgere un esercizio in un altro modo
supernovae è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 14:30   #11
supernovae
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 24
Quote:
class Point3D
{
Point3D(double xx, double yy, double zz) : x(xx), y(yy), z(zz) {}
double x, y, z;
};
Quote:
class Polyline
{
public:
Polyline();
Polyline(const Polyline& obj);
Polyline(Point3D* points, int pointCount);
~Polyline();
Polyline& operator = (const Polyline& obj);
void add_point();
int num_point() const;
Point3D at(int i);
private:
Point3D* Points;
int dim;
};
ad esempio nell'implementare il costruttore di copia ho bisogno di allocare nuova memoria nell'array Points, altrimenti va in errore di segmentazione, vero?
supernovae è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2008, 18:48   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
hai tre scelte:
1) usare vector
2) gestire lo stesso array in oggetti diversi e stare attento alla deallocazione
3) ricopiare tutto l'array, ma il problema è un altro: alla classe Point3D manca il costruttore no-arg, di quegli array non puoi allocarne neanche uno.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 15:34   #13
supernovae
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 24
Quote:
Originariamente inviato da 71104 Guarda i messaggi
alla classe Point3D manca il costruttore no-arg, di quegli array non puoi allocarne neanche uno.
ok pare che siamo arrivati alla conclusione del mio problema. Pensavo che esistesse un altro modo per allocare l'array senza dichiarare un costruttore di default, invece mi sbagliavo...e si che il dev me lo provava a far capire in tutti i modi
supernovae è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2008, 21:53   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da supernovae Guarda i messaggi
ok pare che siamo arrivati alla conclusione del mio problema. Pensavo che esistesse un altro modo per allocare l'array senza dichiarare un costruttore di default, invece mi sbagliavo...e si che il dev me lo provava a far capire in tutti i modi
aldilà di tutto il "dev" come lo chiami tu (non che m'importi visto che del nome di quel cesso puoi fare tutto lo scempio che vuoi) puoi anche usarlo per il tiro al bersaglio
Dev-C++ è una cosa totalmente priva di senso: vecchio, buggato, privo di features, non più sviluppato, non più supportato, e perdipiù usa un compilatore che non è quello "ufficiale" per programmare su Windows (smettiamola con la mania dell'open-source: il MinGW ha un Platform SDK ridotto, a meno che non si debba scrivere un programma portabile è perfettamente inutile).
usa Visual C++ 2008 Express, o se proprio devi Code::Blocks.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2008, 13:14   #15
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da 71104 Guarda i messaggi
(smettiamola con la mania dell'open-source: il MinGW ha un Platform SDK ridotto, a meno che non si debba scrivere un programma portabile è perfettamente inutile).
usa Visual C++ 2008 Express, o se proprio devi Code::Blocks.
Code::Blocks utilizza lo stesso identico compilatore di Dev-C++, quindi non migliora niente da quel punto di vista. È solo una versione più aggiornata, ma è lo stesso MinGW di prima.

Che abbia un platform SDK ridotto non importa, già è tanto che ce l'abbia; Dev-C++ è sempre stato l'IDE scelto da chi era agli inizi per smanettare un po' con la compilazione di semplici programmi. In questo direi che MinGW è più che ottimo, gli va anche di lusso.

Che poi Dev-C++ al giorno d'oggi bisogni evitarlo, be', sono d'accordo anche io. Lo sto dicendo da parecchio, se proprio volete Dev-C++, passate almeno a wxDev-C++ che è un po' meno morto come progetto. Code::Blocks è la scelta migliore IMHO.

Ah, ultima frecciatina (): il compilatore Microsoft ti avverte (a volte anche giustamente) che certe funzioni della libreria standard del C sono poco "sicure", e ti invita a sostituirle con versioni alternative che non esistono altrove; IMHO chi inizia non dovrebbe abituarsi a scrivere roba poco portabile, anche se magari "più sicura" (che poi non è nemmeno vero, basta fare attenzione). A rendere il tutto a prova di bomba ci potrà pensare una volta maturato come programmatore.

ciao
__________________

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 21-09-2008, 13:35   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Code::Blocks utilizza lo stesso identico compilatore di Dev-C++, quindi non migliora niente da quel punto di vista. È solo una versione più aggiornata, ma è lo stesso MinGW di prima.
a parte che Code::Blocks può usare diversi compilatori (anche quelli Microsoft-compatibili credo), comunque lo so: intendevo dire che se proprio proprio Visual C++ gli fa schifo (e già questo è un suo demerito visto che in informatica non esistono religioni) allora è meglio Code::Blocks di Dev-C++.


Quote:
Ah, ultima frecciatina (): il compilatore Microsoft ti avverte (a volte anche giustamente) che certe funzioni della libreria standard del C sono poco "sicure", e ti invita a sostituirle con versioni alternative che non esistono altrove; IMHO chi inizia non dovrebbe abituarsi a scrivere roba poco portabile, anche se magari "più sicura" (che poi non è nemmeno vero, basta fare attenzione). A rendere il tutto a prova di bomba ci potrà pensare una volta maturato come programmatore.
questo è un altro discorso completamente; secondo me sarebbe meglio usare sempre il C++ e mettersi l'anima in pace
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2008, 13:40   #17
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da 71104 Guarda i messaggi
a parte che Code::Blocks può usare diversi compilatori (anche quelli Microsoft-compatibili credo)
Anche Dev-C++ tecnicamente potrebbe, se si imposta manualmente il compilatore. Anche se sarebbe uno scempio, e per il resto concordo perfettamente.
Quote:
Originariamente inviato da 71104 Guarda i messaggi
questo è un altro discorso completamente; secondo me sarebbe meglio usare sempre il C++ e mettersi l'anima in pace
Vabbe', io mettevo l'esempio di uno che inizia dal C, anche se pure io a conti fatti (ovvero dopo aver iniziato dal C), dovendo ricominciare, lo farei dal C++.

ciao
__________________

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
 Rispondi


OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati Oracle AI World 2025: l'IA cambia tutto, a parti...
Anche gli USA inseguono l'indipendenza: ...
TikTok: i content creator guadagneranno ...
Nothing Phone (3a) Lite disponibile, ma ...
Emissioni globali per la prima volta in ...
Bancomat lancia Eur-Bank: la stablecoin ...
NVIDIA supera i 5.000 miliardi di dollar...
I ransomware fanno meno paura: solo un'a...
Pixel 10a si mostra nei primi rendering:...
Intel Nova Lake-S: i dissipatori delle p...
1X Technologies apre i preordini per NEO...
Tesla Cybercab cambia rotta: nel taxi de...
L'industria dell'auto europea a pochi gi...
VMware tra cloud privato e nuovi modelli...
Amazon Haul lancia il colpo di genio: pr...
Windows 11: nuova versione in arrivo a i...
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: 22:39.


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