elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con variable  (Leído 4,206 veces)
tremolero

Desconectado Desconectado

Mensajes: 270


Ver Perfil
Duda con variable
« en: 2 Abril 2015, 19:45 pm »

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.

Código:
#include <iostream>

using namespace std;

int main()
{

    int variable[520000];

    cout << "Hello world!" << endl;

}

Un saludo y gracias.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda con variable
« Respuesta #1 en: 2 Abril 2015, 20:05 pm »

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 Desconectado

Mensajes: 270


Ver Perfil
Re: Duda con variable
« Respuesta #2 en: 2 Abril 2015, 23:28 pm »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con variable
« Respuesta #4 en: 3 Abril 2015, 16:48 pm »

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:
Citar
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 Desconectado

Mensajes: 270


Ver Perfil
Re: Duda con variable
« Respuesta #5 en: 4 Abril 2015, 18:29 pm »

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 Desconectado

Mensajes: 159


Ver Perfil
Re: Duda con variable
« Respuesta #6 en: 4 Abril 2015, 20:22 pm »

Otra forma de usar memoria dinámica es usando vectores
#include <vector>
vector<int> entero;
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda con variable
« Respuesta #7 en: 5 Abril 2015, 00:55 am »

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
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda con variable
« Respuesta #8 en: 5 Abril 2015, 01:03 am »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda con variable
« Respuesta #9 en: 5 Abril 2015, 01:53 am »

y para eso existen las etiquetas GeSHi y de codigo cuyo uso es obligatorio!  :¬¬

Es tedioso hacerlo desde Tapatalk ¬¬
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con formulario y variable PHP
PHP
Red Mx 3 2,008 Último mensaje 23 Diciembre 2006, 18:29 pm
por Red Mx
Duda con comillas y variable
Programación Visual Basic
demoniox12 4 2,051 Último mensaje 10 Diciembre 2007, 09:31 am
por SKL (orignal)
Duda con variable
Scripting
pity0926 2 2,112 Último mensaje 12 Abril 2011, 14:34 pm
por pity0926
Duda variable
Programación C/C++
Bus_19 3 1,944 Último mensaje 29 Enero 2013, 21:09 pm
por Bus_19
duda; if variable = par?
Programación Visual Basic
marrison 4 2,351 Último mensaje 28 Abril 2013, 10:51 am
por marrison
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines