Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Creando un arreglo multidimensional

Estas en el tema de Creando un arreglo multidimensional en el foro de C/C++ en Foros del Web. Hola a todos, Estoy intentando crear el siguiente arreglo: int PSF[57][57][65][65] El programa está acompañado de otras variables. Al compilar el programa y generar el ...
  #1 (permalink)  
Antiguo 15/07/2010, 12:26
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Creando un arreglo multidimensional

Hola a todos,


Estoy intentando crear el siguiente arreglo:

int PSF[57][57][65][65]

El programa está acompañado de otras variables.

Al compilar el programa y generar el ejecutable, no presenta erroes, pero cuando se ejecuta el programa aparece el siguiente error:

Segmentation fault


No sé a que se debe o que estoy haciendo mal..

Me gustaria su ayuda...

Gracias..
  #2 (permalink)  
Antiguo 15/07/2010, 14:01
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

primero, ¿por que vas a usar un arreglo de ese tamaño? : P
tu error debe ser sobrepasar los limites del array en algún for
  #3 (permalink)  
Antiguo 15/07/2010, 14:07
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

Si, esa puede ser la razón para el error, un arreglo muy grande.

La cantidad de datos que manejo necesitan de un arreglo de ese tamaño, asi que la unica forma que sé de declarar ese arreglo es como está arriba. No sé si existe alguna otra forma de declarar un arreglo con ese tamaño....???
  #4 (permalink)  
Antiguo 15/07/2010, 14:13
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

no creo que el error sea del tamaño del arreglo, como dije antes, creo que accedes mal a el en algun for o while o donde introduscas los datos sobrepasando sus limites y sobrescribiendo memoria del programa
  #5 (permalink)  
Antiguo 15/07/2010, 14:18
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

El error Segmentation fault aparace cuando defino la variable PSF, antes de comezar a llenar o acceder. Es sólo declarar int PSF[57][57][65][65] y el error se genera, como le decia, debe ser por el tamaño...
  #6 (permalink)  
Antiguo 15/07/2010, 14:24
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

prueba este codigo a ver si es cierto


Código C:
Ver original
  1. int main(int argc, char **argv)
  2. {
  3.     int PSF[57][57][65][65];
  4.        
  5.    
  6. }
  #7 (permalink)  
Antiguo 15/07/2010, 14:35
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

Prove este código en C++ en el sistema linux:

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.     int main(int argc, char **argv)
  6.         {
  7.              int PSF[57][57][65][65];
  8.       }

Y continua saliendo el mismo error..
  #8 (permalink)  
Antiguo 15/07/2010, 14:43
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

tal ves el problema sea que no tienes la suficiente memoria ram para almacenar eso
  #9 (permalink)  
Antiguo 15/07/2010, 14:45
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

¿que tipos de datos quieres guardar?
  #10 (permalink)  
Antiguo 15/07/2010, 14:50
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

Los datos a ser almacenados en esta variable son de tipo entero, son 1's y 0's...
  #11 (permalink)  
Antiguo 15/07/2010, 14:51
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

¿y para que el array tan grande?, no creo que sea necesario
  #12 (permalink)  
Antiguo 15/07/2010, 14:53
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

Es un proceso de recosntrucción de imágenes pixel a pixel, cada imagen es de un tamaño 65x65 y para poder realizar algunas operaciones es necesario crear un arreglo multidimensional como el que estamos tratando..
  #13 (permalink)  
Antiguo 15/07/2010, 14:57
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

no lo creo, seguro que existe una manera mas optimizada, tal ves si me dices la operacion que quieres realizar, podamos encontrar una
  #14 (permalink)  
Antiguo 15/07/2010, 14:59
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

La operación que intento hacer es una operación de correlación entre dos matrices de tamaño 65x65, estas matrices son bidimensionales por lo cual no hay problema. El problema se genera cuando intento declarar un arreglo de 4 dimensiones...
  #15 (permalink)  
Antiguo 15/07/2010, 15:07
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

¿por que no haces esto?

matris1[][];
matris2[][];

eso ocupa mucho menos memoria
  #16 (permalink)  
Antiguo 15/07/2010, 15:09
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

yo no tengo ningun problema declarando ese arreglo, lo probe con gcc y con clang, en freeBSD
  #17 (permalink)  
Antiguo 15/07/2010, 15:29
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

La solución es encontrar una alternativa para sustituir la declaración de
Código C++:
Ver original
  1. int PSF[57][57][65][65]
o implementar las operaciones sin necesidad de usar este arreglo.....Ya prove algunas alternativas y funcionan...
  #18 (permalink)  
Antiguo 16/07/2010, 08:22
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Creando un arreglo multidimensional

Se desborda la pila, utiliza memoria dinámica.
  #19 (permalink)  
Antiguo 16/07/2010, 08:34
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Creando un arreglo multidimensional

Hola fightmx,

Ya pense en esa opción. Estoy iniciando en porgramación en C++, todavia no sé muy bien como crear esa variable PSF de 4 dimensiones, lo unico que sé es que habría que crear la variable con 4 punteros, algo asi como
Código C++:
Ver original
  1. int ***PSF
, pero no sé como asignar memoria dinámica en este caso.


Me podria indicar como hacer todo el proceso para asignar la memoria a una varible de este tamaño????

Gracias...
  #20 (permalink)  
Antiguo 16/07/2010, 09:08
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

no se si sea posible que nos proporcionaras el algoritmo que estas utilizando. Para revisarlo y darte una mejor solución
  #21 (permalink)  
Antiguo 16/07/2010, 09:48
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Creando un arreglo multidimensional

Mientras los índices sean valores constantes no luce tan complicado:

Código:
#include <iostream>
using namespace std;


int main(){
	int (*PSF)[57][65][65] = new int[57][57][65][65];

	int i, j, k, w;

	for(i = 0; i < 57; i++)
		for(j = 0; j < 57; j++)
			for(k = 0; k < 65; k++)
				for(w = 0; w < 65; w++)
					PSF[i][j][k][w] = 1;

	int count = 0;

	for(i = 0; i < 57; i++)
		for(j = 0; j < 57; j++)
			for(k = 0; k < 65; k++)
				for(w = 0; w < 65; w++)
					if(PSF[i][j][k][w] == 1) count++;

	cout << (count == 57*57*65*65) << endl;

	delete []PSF;
	return 0;
}
El ejemplo es para que observes la manera de declarar el puntero, así como también las asignaciones y comprobación de las mismas a través de los índices i, j, k, w.
  #22 (permalink)  
Antiguo 17/07/2010, 10:08
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: Creando un arreglo multidimensional

por ahi dijiste que querias almacenar 1 y 0.
¿¿¿por que no en vez de un int usas bool???
usarias mucha menos memoria
  #23 (permalink)  
Antiguo 22/07/2010, 01:49
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Creando un arreglo multidimensional

Aunque un poco tarde, pero ahí te comento lo que creo que pasa:

El arreglo, tal como lo has definido, necesita más de 50 Mb de memoria (contando int de 32 bits). Cuando declaras una variable dentro de una función, ésta se crea en la pila, con lo que, con ese tamaño, seguro que la desbordas, y de ahí el error que te da.

Tal como han sugerido otros miembros del foro, te las tendrás que ingeniar para reducir el tamaño, o bien emplear memoria dinámica. Si no lo haces así, la única solución es declarar el arreglo como variable global y rezar. Si ya la tienes declarada como variable global, o al hacerlo persiste el problema, tocará seguir alguna(s) de las sugerencias anteriores.
  #24 (permalink)  
Antiguo 22/07/2010, 11:52
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: Creando un arreglo multidimensional

en clase , no les decimos arreglos, son matrices o arrays.
aunque solo trabajamos con los bidimensionales.....
  #25 (permalink)  
Antiguo 23/07/2010, 19:11
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Creando un arreglo multidimensional

Cita:
Iniciado por vani18 Ver Mensaje
en clase , no les decimos arreglos, son matrices o arrays.
aunque solo trabajamos con los bidimensionales.....
si, ¿también usan conio y turbo c?

Etiquetas: multidimensional, arreglos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:36.