Question

J'ai écrit avec succès un code C++ pour le tri radix en créant 10 buckets.Pour les 10 buckets, je les ai créés de cette façon :

struct node{
    struct node* next;
    long value;
};

struct node*bucket[10];

for (int i=0; i<10; ++i) {  
    bucket[i] = (struct node *) malloc (1000000*sizeof(struct node));
}

et c'est parfaitement réalisé.

Mais maintenant, je dois augmenter le montant de mes buckets à 100 000.J'ai essayé de modifier la taille de ces buckets comme :

struct node*bucket[100000];

for (int i=0; i<100000; ++i) {  
    bucket[i] = (struct node *) malloc (1000000*sizeof(struct node));
}

Mais cette fois, je pense que je ne peux même pas créer ces buckets.J'utilise Visual Studio pour coder, et c'est en C++.Le compilateur m'a donné ces avertissements :

:avertissement C4305 :'argument' :troncature de '__int64' à 'size_t'

:avertissement C4309 :'argument' :troncature de valeur constante

J'ai cherché sur Internet, quelqu'un a dit que le chiffre était trop grand.C'est la première fois que je gère un si grand nombre dans la liste chaînée.Dois-je modifier quelque chose pour que ce code fonctionne à nouveau ?

Merci.Toutes les idées et aides seront appréciées !

Était-ce utile?

La solution

J'ai transformé votre code en un petit exemple de programme :

#include <stdlib.h>

struct node {
    int i;
};

int main()
{
    struct node*bucket[100000];

    for (int i=0; i<100000; ++i) { 
        bucket[i] = (struct node *) malloc (1000000*sizeof(struct node));
    }
}

Cela compile bien avec Visual Studio 2010.

Ce qui me vient à l'esprit, c'est que vous allouez un tableau de 100 000 pointeurs (probablement 4 octets chacun).Cela me rappelle les anciens compilateurs qui ne vous permettaient pas d'utiliser plus de 64 Ko d'espace de pile par variable (ou fonction ?Je me rappelle plus.C'était avec Turbo Pascal ou Turbo C...).

Puisqu'il s'agit de C++, je suggère de ne pas utiliser de tableau C brut en premier lieu.Au lieu de cela, vous pouvez remplacer le code ci-dessus par :

#include <vector>

struct node {
    int i;
};

int main()
{
    std::vector<node> bucket( 100000 );
}

Le std::vector L'objet peut être utilisé dans tous les cas où vous utiliseriez un tableau C.

Autres conseils

Probablement le problème est dans la condition de boucle :

for (int i=0; i<100000; ++i)
              ^^^^^^^^^

Vous devez avoir std::size_t i; ou unsigned long i; comparer jusqu'à 100000.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top