2011-04-21 28 views
7

Estoy trabajando en una aplicación fuera hay tres tamaños posibles de los datos introducidos:La asignación de un grande (5000 +) Matriz

  • pequeña: 1000 elementos
  • medio = 5000 elementos
  • grande = 500,000 elementos

El problema es que no puedo asignar la matriz grande. Parece que no se acepta un tamaño superior a 5000.

me sale un error de tiempo de ejecución cuando lo haga lo siguiente:

long size=1000; 
char ch; 
int arr[size]; 
ch=getch(); 

if(ch==..) 
    size=...; 

Tamaños de 1000 y 5000 parecen funcionar bien, pero ¿cómo puedo hacer una matriz de tamaño 500k de esta manera?

+0

¿Qué quiere decir exactamente por "no puedo asignar"? ¿Estás obteniendo un error? ¿Cuál es el mensaje y de dónde lo sacas? Tenga en cuenta que 500000 elementos no son 500K. Probablemente sea 2 Meg, ya que los C 'int's suelen tener 4 bytes cada uno. –

+0

quiero decir que me sale un error de tiempo de ejecución, por 500k quiero decir 500 mil elementos, no tamaño –

+1

el error de tiempo de ejecución es un desbordamiento de la pila –

Respuesta

8

Su pila no puede contener tanta información. Usted tiene que destinar grandes matrices en el montón de la siguiente manera:

int *array = malloc (sizeof(int)*size); 

Como PMG señaló recuerda a liberar su memoria una vez que su hecho.

free(array); 
+0

el idioma en la pregunta es c –

+1

o, es equivalente en C 'int * array = malloc (sizeof (int) * size) ' – cobbal

+0

sí, gracias por el aviso. Solucionado eso. – Pepe

3

Es demasiado grande para la pila. En su lugar, debe asignarlo en el montón con malloc.

8

puede asignar una gran gama tan amplia en el montón:

int *arr; 
arr = malloc (sizeof(int) * 500000); 

No se olvide de comprobar que la asignación succeded (si no - malloc devuelve NULL).

Y como mencionó pmg, dado que esta matriz no se encuentra en la pila, tiene que free una vez que haya terminado de trabajar con ella.

+0

Y recuerde' liberar' el puntero una vez que haya terminado de trabajar con él. – pmg

+0

@pmg - gracias, solo lo pensé :) – MByD

Cuestiones relacionadas