Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    118

    C++ Dimensione massima array

    Problema per me. Sto scrivendo gli algoritmi di selection sort e di quick sort con e senza puntatori per vedere i relativi vantaggi di uno o l'altro. Ma ho un grosso problema dato che per fare test del genere ho bisogno di grandi quantità di dati ho creato un file di testo con 10000000 di numeri. Vorrei far ordinare questo file dagli algoritmi. Ecco il problema: qual'è la dimensione massima di un array? Con il tipo vector non ho problemi, il vettore è inizializzato e va bene, però a me serve usare gli array che teoricamente sono + efficaci dei vector, anche perchè non ho bisogno di ridimensionare il vettore, la dimensione è fissa. Mi da un errore di segmentation fault. (se interessa sto su linux)

    ecco il frammentino di codice.
    codice:
    const long DIM = 10000000;
    
    long a[DIM];
    	ifstream lista;
    	lista.open("listadinumeri.txt");
    	long i=0;
    	cout<<"Inizializzazione vettore, attendere l'operazione può richiedere molto tempo data la quantità di dati..."<<endl;
    	while (i<DIM) {
    		lista>>a[i];
    		i++;
    	}
    	cout<<"Inizializzazione finita!"<<endl;
    	lista.close();
    le cose sono due, o non posso dichiarare un array di dimensione long (e qui sarei io il co***ne) o mi devo arrendere a fare il test con array + piccoli.
    Se al posto dell'array uso vector<long> a(DIM); va tutto bene

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    118
    Risolto. in pratica l'array lo devo dichiarare con il puntatore.

    long* a = new long[DIM];

    Vabbè sfuma la mia idea di vedere le differenze tra programmi con puntatori e quelli senza.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema deriva dal fatto che hai dichiarato l'array all'interno della funzione main e quindi questo viene allocato nello stack.
    Evidentemente nello stack non c'e' tutto questo spazio.

    Quindi, o lo allochi all'esterno del main oppure usando la new ...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    118
    grazie perla risposta, effettivamente alla fine ci ero arrivato. Ti pongo un altra domanda, alla fine dei conti al livello prestazionale mi conviene allocare memoria nell'heap con new o è meglio allocarla nello stack quindi come mi hai detto fuori dal main?

    Grazie e ciao

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La memoria viene allocata nello stack se la dichiarazione avviene all'interno del main, ad esempio con

    lond a[DIM];

    E' meglio usare l'heap con la new ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.