|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 64
|
[c++]Array grandi dimensioni
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 Ah, dimenticavo, uso Code:Blocks sotto xp! Ultima modifica di Mattiatn : 29-12-2008 alle 09:58. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
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)
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
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:
Codice:
#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;
}
Non prendere per oro colato quello che dico perchè sono un super niubbino del c++ Ciauz
__________________
iMac 27" 5K |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 64
|
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
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
Quote:
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Come ti ho gia detto sono super niubbino in c++. Ho appena cominciato a studiarlo giusto perchè ho l'esame a febbraio
ciauz
__________________
iMac 27" 5K |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
idem io; quindi non so su chi possa fare più affidamento fra me e te
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:03.




















