Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    157

    [C++] Problema memoria array multidimensionali

    ciao a tutti
    ho un problema nel programma che sto facendo, vi spiego.
    in pratica necessito di utilizzare tre array di interi multidimensionali del tipo vettore[27][6659] (avete letto bene, 27*6659=179793 campi per ogni vettore). Non ci sono errori nella compilazione del programma che parte e che mi si blocca con la segnalazione errori di windows appena appare la maschera della console. In debug mi da errore di segmentazione fin dalla prima riga, anche prima delle dichiarazioni delle variabili. Dopo le dovute prove ho visto che riesco ad eseguire solamente un programma con due vettori di 27*6659 campi, mentre se dichiaro anche il terzo vettore mi da l'errore come sopra.
    vorrei sapere come potrei fare per utilizzare tutti e tre i vettori semmai usando il meno possibile (se possibile ) i puntatori (ho letto guide su guide ma sono duro a capirli ). Pensavo di utilizzare un oggetto vector per l'array multidimensionale ma non saprei bene come utlizzarlo... grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Non vorrei dire un'idiozia, ma se ben ricordo, le matrici hanno un limite, oltre il quale non puoi andare. Invece di usare un array, usa i vettori (vector<tipo>). Non dichiarare array statici.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    157
    ho provato utilizzando un vector<vector<int> > ma il programma mi da comunque l'errore di segmentazione...

  4. #4
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Originariamente inviato da Seso7
    ho provato utilizzando un vector<vector<int> > ma il programma mi da comunque l'errore di segmentazione...
    Innanzitutto ti posso confermare quel che ho detto: ho appena appurato che il C++ permette, in generale, un array di al più 1024. Quindi se usi quell'array gigante, è ovvio che ti si impalla tutto. Usando un vettore ce la dovresti fare, anche se per il momento non posso esserti di aiuto perché è una parte che non ho ben studiato (la dovrei andare a ripassare).

  5. #5
    I tre vettori in tutto dovrebbero occupare 2157516 B (circa 2 MB), per cui allocando i vettori nell'heap non dovresti avere problemi.
    codice:
    #include <iostream>
    #include <new>
    
    int main()
    {
        //Alloca la memoria
        int (* vettore)[6659] = new int[27][6659];
        //Inizializza il vettore a valori futili
        for(int c=0; c<27; c++)
        {
            for(int d=0; d<6659; d++)
                vettore[c][d]=d;
        }
        //Mostra che ha effettivamente inizializzato il vettore
        for(int c=0; c<27; c++)
        {
            for(int d=0; d<6659; d++)
                std::cout<<vettore[c][d]<<' ';
            std::cout<<std::endl;
        }
        //Dealloca la memoria
        delete [] vettore;
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Array dinamici, giusto?

  7. #7
    Originariamente inviato da xshell
    Innanzitutto ti posso confermare quel che ho detto: ho appena appurato che il C++ permette, in generale, un array di al più 1024.
    Non è necessariamente vero. C++ di suo permette di allocare sullo stack array di qualunque dimensione, ma se lo stack è troppo piccolo il programma va necessariamente in crash. Non a caso gli array di dimensioni non indifferenti di solito si allocano nell'heap.
    Array dinamici, giusto?
    Sì.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da xshell
    Innanzitutto ti posso confermare quel che ho detto: ho appena appurato che il C++ permette, in generale, un array di al più 1024.
    In realta', VC++, per default, alloca uno stack di 1 M ... ed e' comunque modificabile.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    157
    ho risolto grazie a new delete ecc come suggerito da MItaly... Grazie mille per l'aiuto!
    una cosa in piu: sapreste dirmi come posso ordinare (crescente o decrescente non è rilevante) tutto l'array bidimensionale secondo un campo? mi spiego meglio
    vorrei avere i valori di v[1][0a6658] ordinati e di conseguenza ordinare i corrispettivi valori di tutto l'array. come posso fare? se non mi sono spiegato bene chiedete...

  10. #10
    Puoi usare le funzione qsort.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.