Pregunta

Me escribió correctamente un código C++ para radix sort mediante la creación de 10 cubos.Para el 10 cubos, he creado en esta forma:

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));
}

y es perfecto hecho.

Pero ahora necesito aumentar la cantidad de cubos de 100000.He intentado modificar los cubos de tamaño como:

struct node*bucket[100000];

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

Pero esta vez creo que no puedo crear los cubos.Estoy utilizando Visual Studio para el código, y esto es en C++.El compilador me dio estas advertencias:

:advertencia C4305:'argumento' :truncamiento de '__int64' a 'size_t'

:advertencia C4309:'argumento' :el truncamiento de valor constante

He buscado en el internet, alguien dice que el número es demasiado grande.Esta es la primera vez que me enfrento a un gran número en la lista enlazada.¿Tengo que modificar algo para que este código funcione de nuevo?

Gracias.Las ideas y la ayuda que me será apreciada!

¿Fue útil?

Solución

Me volví tu código en un pequeño programa de ejemplo:

#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));
    }
}

Esto compila perfectamente con Visual Studio 2010.

Lo que viene a mi mente es que usted está asignando una matriz de 100000 punteros (probablemente de 4 bytes cada uno).Me recuerda a la vieja compiladores que no permiten el uso de más de 64 kb de espacio en la pila por variable (o función?No puedo recordar.Fue con Turbo Pascal o Turbo C...).

Ya que esto es C++, me sugieren que no sólo el uso de una materia prima matriz C en el primer lugar.En su lugar, usted puede reemplazar el código anterior con:

#include <vector>

struct node {
    int i;
};

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

El std::vector objeto puede ser usado en todos los casos en que tendría que utilizar una matriz C.

Otros consejos

Probablemente el problema está en la condición de bucle:

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

Usted necesita tener std::size_t i; o unsigned long i; para comparar hasta 100000.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top