C/Visual C - arrays en c

 
Vista:

arrays en c

Publicado por emilio (1 intervención) el 26/05/2005 17:30:46
hola amigos

este es mi primer mensaje en este foro, espero explicarme con claridad y que todos saquemos algo de provecho.
ando con un programa de manojo de imágenes. en un momento dado quiero crear dos arrauys 2D del mismo tamaño que la imagen que estoy tratando. el código, resumido, viene a ser el siguiente:

Gan_Image *pImage;

//carga una imagen jpg en pImage
pImage = gan_image_read ( "pez13r1.jpg", GAN_JPEG_FORMAT, NULL );

//para almacenar ancho y alto de pImage//
height = (int)pImage->height;
width = (int)pImage->width;

// creo dos arrays con las mismas dimensiones que pImage
int im_unos_ceros [height] [width];
int uno_cero_temp [height] [width];

bien, el problema es que si declaro estos dos últimos arrarys tal y como se ven, al ejecutar me da una violación de segmento. si hag lo mismo pero poniendo los valores numéricos de height y width, es decir, int im_unos_ceros [200][300]; el error no se produce. tampoco se produce el error si sólo declaro uno de los dos arrays. si declaro uno de los arrarys del modo escrito y otro con valores numéricos vuelve a aparecer la violación del segmento, cualquiera que se el orden en que lo haga.
si alguien tiene una pista sobre hacia dónde tirar le estaría muy agradecido

un saludo

emilio
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 11
Ha aumentado su posición en 5 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

RE:arrays en c

Publicado por zz (318 intervenciones) el 28/05/2005 02:09:23
Hi! creo que no puedes declarar ningún arreglo con datos de una variable, tienes que ser constantes o números. Ya que según lo que me enseñaron de como funciona un compilador como el c, cuando tu compilas un programa primero checa que tu código este bien y no realiza ninguna instrucción, solo checa que sigas las reglas de c, y pues como no hace ninguna instrucción no sabe el valor que van a tener tus variables height y width por lo que no sabe cuanto espacio en memoria les va a reservar. Asi que tienes que declarar en las 2 partes del arreglo números o constantes.
Lo que puedes hacer es declarar tu arreglo con números o constantes muy grandes y luego con un ciclo o con un if ponerle el limite de tus varibles.
O sino puedes usar arreglos dinamicos.
Lo que no se es porque si declaras un arreglo con variables y otro con números porque no te da ningún error,porque yo uso c++ builer y si me marca error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arrays en c

Publicado por Carlos (1 intervención) el 28/05/2005 02:31:59
const int height = imagen->height;
const int width=imagen->width;

//una manera es:
int imagen[height][width];

//otra manera y sin colocar const a las variables height y widht es :
int **imagen;
imagen = new int*[height];
for( int i=0; i<height; i++ )
imagen[i]=new int[width];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar