IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Limite Allocation M�moire d'un tableau d'entier


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Par d�faut [R�solu] Limite Allocation M�moire d'un tableau d'entier
    Bonjour � tous,
    Voil�, je suis d�butant en programmation, j'ai fait un petit programme permettant de cr�er une liste de nombre premier.

    Le probl�me est que lorsque je cr�e un tableau de plus de 500000 entr�es, au bout d'un certain temps, une erreur se produit et m'annonce que la m�moire n'est plus lisible.

    Y a t'il une solution pour cr�er un tableau plus grand ?

    Merci d'avance.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <iostream>
    #include <math.h>
     
     
    bool isprime(unsigned int nbr,  unsigned int *premier){
        unsigned int db,racine;
        racine=ceil(sqrt(nbr));
        db=1;
     // On essais de diviser "nbr" par tous les nombres premiers inférieur ou égal à sa racine
        while(*(premier+db)<=racine){
            if(nbr%(*(premier+db))==0) return 0;
            db++;
        }
        return 1;
    }
     
     
    int main()
    {
    unsigned int nbr,i,k,ch;
     
    std::cout<<"TAILLE DU TABLEAU : ";
    std::cin>>ch;
    std::cout<<std::endl;
     
    if(ch<3)ch=3;
     
    unsigned int *premier=new unsigned int[ch];   // Création du tableau contenant les nombres premiers
     
     
        premier[0]=2;
        premier[1]=3;
        premier[2]=5;
        k=1;
        i=3;
     
        while(i!=ch)
        {
            nbr=6*k+1; // Fait que tous les nombres premiers sont congru à 6 modula 1 et congru à 6 modulo 5  
            if(isprime(nbr,premier)==1){
                premier[i]=nbr;
                i++;
            }
     
           nbr=6*k+5;
            if(isprime(nbr,premier)==1){
                premier[i]=nbr;
                i++;
            }
     
            k++;
        }
     
     
    	std::cout << "Le dernier nombre premier trouvé est : " <<premier[ch-1]<< std::endl;
    	delete[] premier;
    	return 0;
    }

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Tu peux toujours essayer d'utiliser un conteneur moins contig� en m�moire, du style std::list ou std::deque.

    Ceci-dit, 500 000 entiers cela ne repr�sente qu'environ 2 Mo de donn�es, pas de quoi saturer ta m�moire en principe.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par d�faut
    Une id�e comme �a:

    tu teste la fin du while avec i != ch mais i peut �tre incr�ment� deux fois dans ta boucle.
    Donc il est possible que tu ai une boucle infinie.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Par d�faut
    Non, la boucle n'est pas infini, lorsque je teste avec ch=5000 par exemple aucun probl�me
    J'ai essayer avec un autre compileur de GCC mais l'erreur persiste

  5. #5
    Membre exp�riment�
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par d�faut
    Bonjour...

    J'ai test� ton programme en sortant la valeur de i dans un fichier e j'ai test� avec ch=500000.

    La valeur i=500000 n'est jamais test�!! La boucle ets donc infinie. Remplace ton while(i != ch) par while( i < ch).

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Par d�faut
    Merci Albenejean effectivement, je m'en �tait pas rendu compte
    Le programme fonctionne correctement maintenant 8)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me d'allocation m�moire d'un tableau de nodes !
    Par AntiLoxy dans le forum Irrlicht
    R�ponses: 5
    Dernier message: 14/11/2011, 11h11
  2. Pr�-allocation m�moire d'un tableau.
    Par Invit� dans le forum Langage
    R�ponses: 2
    Dernier message: 06/09/2010, 17h26
  3. R�ponses: 2
    Dernier message: 23/08/2007, 12h22
  4. Allocation m�moire : tableau vs malloc
    Par scorbo dans le forum D�buter
    R�ponses: 4
    Dernier message: 15/06/2007, 12h47
  5. Allocation m�moire et tableau
    Par Cazman dans le forum C++
    R�ponses: 7
    Dernier message: 07/07/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo