Autor
|
Tema: Duda con variable (Leído 4,290 veces)
|
tremolero
Desconectado
Mensajes: 270
|
Hola, a ver quien me puede explicar porque y como solucionar el siguiente error que me da. Estaba mirando el tema de arrays y matrices., asi que tenia abierto el codeblocks y despues de escribir un hello world!, y de probar un rato declarar variables y darles valor, se me habia pasado la idea de crear un array muy grande y meterle valores random. Quiero saber porque me da error al declarar un array muy grande y como puedo hacer para declararlo. Despues de ver que me daba error, probando he visto que si declaro un array de mas de 51000 me da error. la cosa es que compila pero cuando ejecuto me salta un error de windows que dejo de funcionar al instante de ejecutarlo. Que conste que la primera vez le habia dado un tamaño de 20000000. #include <iostream>
using namespace std;
int main() {
int variable[520000];
cout << "Hello world!" << endl;
} Un saludo y gracias.
|
|
|
En línea
|
|
|
|
engel lex
|
No hay realmente un maximo standard para los array, sin embargo hasta donde se, el sistema operativo tiene limites de memoria asignables, así que no puede escoger así como así un espacio de 51000 elementos (51kb... :s no se por qué) para mi (en linux) me permite mover hasta 2.090.000 elementos como asignación inicial (no una cantidad exacta sino arbitraria, pueden ser cientos más o menos) antes de declararme una violacion de segmento... sin embargo con malloc o new, puedes asignar más espacios (en mi caso he llegado a una variable creo que de 100mb) aún así estás limitado por el espacio continuo libre en la ram
realmente desconozco la diferencia entre la declaración directa de la variable y malloc pero claramente hace la diferencia
|
|
« Última modificación: 2 Abril 2015, 20:07 pm por engel lex »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
tremolero
Desconectado
Mensajes: 270
|
Muchas gracias por la respuesta engel lex.
Imagine que seria por el tema de la memoria ram y algun tipo de bloqueo de seguridad.
Ahora mi duda es como hago el array de dos dimensiones, que queria de 20 millones xD
porque claro int v[20000000][20], da error :S
Aunque se me ocurren varias formas, una dividirlo en partes(cosa que no creo que sea bueno) y otra opcion que es la que mas me interesa seria almacenarlo en archivos.
Asi que si no os importa, que seria mejor almacenarlo en un archivo plano ej .txt o conectar con alguna base de datos y guardarlo ahi?
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
|
Re:
« Respuesta #3 en: 3 Abril 2015, 13:22 pm » |
|
¿Probaste con punteros a memoria dinámica? int **v = new int*[2000000]; for(int i=0; i<2000000; i++) v[ i ] = new int[20];
|
|
« Última modificación: 5 Abril 2015, 00:54 am por ivancea96 »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Quiero saber porque me da error al declarar un array muy grande y como puedo hacer para declararlo.
Despues de ver que me daba error, probando he visto que si declaro un array de mas de 51000 me da error. la cosa es que compila pero cuando ejecuto me salta un error de windows que dejo de funcionar al instante de ejecutarlo. Ello se debe a los limites que cada compilador decide para el tamaño máximo de un objeto. Una discusión sobre los limites en el lenguaje C es Array size limits. En cuanto al ultimo borrador del estándar de C++ el tema se trata en el anexo B: Annex B (informative) Implementation quantities [implimits] 1 Because computers are finite, C ++ implementations are inevitably limited in the size of the programs they can successfully process. Every implementation shall document those limitations where known. This documentation may cite fixed limits where they exist, say how to compute variable limits as a function of available resources, or say that fixed limits do not exist or are unknown. 2 The limits may constrain quantities that include those described below or others. The bracketed number following each quantity is recommended as the minimum for that quantity. However, these quantities are only guidelines and do not determine compliance. — Nesting levels of compound statements, iteration control structures, and selection control structures [256]. — Nesting levels of conditional inclusion [256]. — Pointer, array, and function declarators (in any combination) modifying a class, arithmetic, or incom- plete type in a declaration [256]. — Nesting levels of parenthesized expressions within a full-expression [256]. — Number of characters in an internal identifier or macro name [1 024]. — Number of characters in an external identifier [1 024]. — External identifiers in one translation unit [65 536]. — Identifiers with block scope declared in one block [1 024]. — Macro identifiers simultaneously defined in one translation unit [65 536]. — Parameters in one function definition [256]. — Arguments in one function call [256]. — Parameters in one macro definition [256]. — Arguments in one macro invocation [256]. — Characters in one logical source line [65 536]. — Characters in a string literal (after concatenation) [65 536]. — Size of an object [262 144]. En buen cristiano: para conocer los limites de un compilador en particular habrá que revisar su documentación. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
tremolero
Desconectado
Mensajes: 270
|
Gracias a todos por las respuestas. ¿Probaste con punteros a memoria dinámica? int **v = new int*[2000000]; for(int i=0; i<2000000; i++) v = new int[20];
Me salta error en " v = new int[20];" dice: error:cannot convert 'int*' to 'int**' in assignment.
Respecto a rir3760, sino me equivoque en los calculos creo que tampoco ocupaba tanta memoria ram.
Asi que explico un poco por encima mi idea principal, trataba de primero crear una cantidad limitada de posibles para luego pasarle filtros y ver que resultados me daba.
Claro esta que luego mas adelante imagino que me interesaria guardarlos, pero claro no he continuado porque cuando trataba de crear una gran cantidad me he topado con este error.
Un saludo y gracias.
|
|
|
En línea
|
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
Otra forma de usar memoria dinámica es usando vectores #include <vector> vector<int> entero;
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Me salta error en " v[ i ] = new int[20];" dice: error:cannot convert 'int*' to 'int**' in assignment
Ya está corregido, el '[ i ]' lo interpreta el foro como letra cursiva.
|
|
|
En línea
|
|
|
|
engel lex
|
Ya está corregido, el '[ i ]' lo interpreta el foro como letra cursiva.
y para eso existen las etiquetas GeSHi y de codigo cuyo uso es obligatorio!
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
y para eso existen las etiquetas GeSHi y de codigo cuyo uso es obligatorio! Es tedioso hacerlo desde Tapatalk ¬¬
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda con formulario y variable PHP
PHP
|
Red Mx
|
3
|
2,039
|
23 Diciembre 2006, 18:29 pm
por Red Mx
|
|
|
Duda con comillas y variable
Programación Visual Basic
|
demoniox12
|
4
|
2,100
|
10 Diciembre 2007, 09:31 am
por SKL (orignal)
|
|
|
Duda con variable
Scripting
|
pity0926
|
2
|
2,145
|
12 Abril 2011, 14:34 pm
por pity0926
|
|
|
Duda variable
Programación C/C++
|
Bus_19
|
3
|
1,977
|
29 Enero 2013, 21:09 pm
por Bus_19
|
|
|
duda; if variable = par?
Programación Visual Basic
|
marrison
|
4
|
2,394
|
28 Abril 2013, 10:51 am
por marrison
|
|