El truncamiento del tamaño de la lista enlazada de "__int64' a 'size_t
-
13-12-2019 - |
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!
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
.