PDA

View Full Version : [c++]Array grandi dimensioni


Mattiatn
29-12-2008, 09:55
Ciao a tutti,

sono nella situazione di dover eseguire delle elaborazioni partendo da un file txt di grosse dimensioni.

Se limito il numero di righe il tutto viene eseguito, ma appena tanto di ricaricare il file nel suo intero, il programma salta.

Non sono un'esperto, ma penso che sia un limite della memoria, come ad esempio succede facendo girare il seguente programma:

#include <iostream>
using namespace std;

int main()
{
//Dimensioni degli array
int a=1000;
int b=1000;
//Array
double c[a][b];
}

C'è un modo per far "accettare" al programma matrici di dimensione elevate?

Vi ringrazio immensamente :D :D

Ah, dimenticavo, uso Code:Blocks sotto xp!

wizard1993
29-12-2008, 11:01
bhe finche non dicharerai come costanti quei due interi dubito che compilera, inoltre per fare questo giochino ti consgilio di rivolgerti alla stl con i suoi contenitori (Vector e List mi sembrano i più appropriati)

Don[ITA]
29-12-2008, 11:03
Ti dà errore perchè così facendo tenti di creare una matrice 1000X1000 nello stack, che purtroppo è molto piccolo. Quello che devi fare è usare l'heap e quindi l'operatore new:

#include <iostream>

using namespace std;

int main(int argc, char ** argv) {

//Dimensioni degli array
const int a=1000;
const int b=1000;

//Allocazione dell'array
double **c = new double*[a];
for(register int i=0; i<a; i++)
c[i] = new double[b];

//Usi c[a][b] come ti pare

//Deallocazione
for(register int i=a-1; i>=0; i--)
delete [] c[i];
delete [] c;
}


Questo è uno dei tanti modi per usare una matrice di double. Ma secondo me ti converrebbe usare un vector di vector e overloadare l'operatore [ ].
Non prendere per oro colato quello che dico perchè sono un super niubbino del c++ :D

Ciauz

Mattiatn
29-12-2008, 11:15
Scusami Don se abuso della tua disponibilità e pazienza, non è che potresti postarmi (sempre se lo hai lì a disposizione) qualche link di documenti che parlano di stack e heap?

L'ultima fase, quella di deallocazione, suppongo quindi che serva a cancellare quello scritto in heap, ma nel mezzo (//Usi c[a][b] come ti pare), posso fare molte altre operazioni o vi sono limitazioni (tenendo conto che l'unico array di grande dimensioni che vado ad utilizzare io sarebbe c).

Inoltre è possibile effettuare due allocazioni di questo tipo (ovvero 2 matrici).

Spero di essermi spiegato bene, e ti ringrazio nuovamente per la risposta:yeah:

wizard1993
29-12-2008, 12:31
Scusami Don se abuso della tua disponibilità e pazienza, non è che potresti postarmi (sempre se lo hai lì a disposizione) qualche link di documenti che parlano di stack e heap?

L'ultima fase, quella di deallocazione, suppongo quindi che serva a cancellare quello scritto in heap, ma nel mezzo (//Usi c[a][b] come ti pare), posso fare molte altre operazioni o vi sono limitazioni (tenendo conto che l'unico array di grande dimensioni che vado ad utilizzare io sarebbe c).

Inoltre è possibile effettuare due allocazioni di questo tipo (ovvero 2 matrici).

Spero di essermi spiegato bene, e ti ringrazio nuovamente per la risposta:yeah:

puoi farci quello che ti pare, e cosa più importante lo puoi riallocare a una nuova dimensione, e puoi allocarni quanti te ne pare, l'unica limitazione è la memoria di sistema

Don[ITA]
29-12-2008, 12:40
Come ti ho gia detto sono super niubbino in c++. Ho appena cominciato a studiarlo giusto perchè ho l'esame a febbraio :D quindi le mie conoscenze si fermano (per ora) ai ricordi delle lezioni in uni...Mi dispiace non esserti di maggiore aiuto :cry: Cmq dai un occhio a stl come dice il buon wizard :D

ciauz

wizard1993
29-12-2008, 16:58
;25621142']Come ti ho gia detto sono super niubbino in c++

idem io; quindi non so su chi possa fare più affidamento fra me e te :D