Go Down

Topic: problema creando array multidimensional (Read 1 time) previous topic - next topic

xapu

buenas!
mi problema es que intento declarar el tamaño de una array multidimensional leyendo una direccion de la eprom.. pero me da error  :~
Code: [Select]

const int alertnumber = EEPROM.read(10);
int alertpins[alertnumber][3];

el error es este..

Code: [Select]
test:8: error: array bound is not an integer constant
test.cpp: In function 'void loop()':


es porque una array solo se puede declarar con un numero?
si es asi hay alguna manera de hacer lo que quiero??
muchas gracias ^^



curro92

Hola,
creo que para declarar la dimensión de un array tienes que usar una constante (
Code: [Select]
integer constant) y no una variable.
Si detallas un poco más lo quer quieres conseguir, tal vez podamos darte alguna idea.

xapu


Hola,
creo que para declarar la dimensión de un array tienes que usar una constante (
Code: [Select]
integer constant) y no una variable.
Si detallas un poco más lo quer quieres conseguir, tal vez podamos darte alguna idea.



haber.. lo que quiero hacer es que el programa al arrancar, lea una direccion de la eprom, en la que se define asta que pin debe inicializar como input la placa.. y luego para guardar el valor de esos pines necesito una array cuyo index sea la cantidad de pines que hay.

por ejemplo:
en la direccion de la eprom esta el numero 13,
pues quiero que la array sea array[15][3]
y luego con un bucle for, declararlos como input.. etc etc.. pero el problema esta en que no hay manera de declarar el tamaño de la array leyendo de la epprom :S

curro92

Hola,
creo que para eso tendrías que usar punteros:
Code: [Select]

  int n,  *alertpins;

  // si haces, por ejemplo
  n = 12;
  // puedes luego asignar sitio en la memoria para 12 int
   alertpins = (int*)malloc( n * sizeof(int));


Mitxel

Este es un problema bastante fundamental. Ocurre porque ese array está definida como una "variable global"

Una "variable global" es una variable definida fuera de cualquier función y accesible desde cualquier punto del código, desde el interior de cualquier función. Para el compilador, estas variables son simplemente lugares (direcciones) en la memoria RAM y para compilar el programa necesita saber cuánto espacio debe reservar y en qué sitio está cada variable.

Una posibilidad es usar "asignación dinámica de memoria" con la función malloc() pero se rumorea que el C de Arduino no maneja bien la función free()

Otra posibilidad es declarar esa variable dentro de una función, lo que crea esa variable en el stack, en "tiempo de ejecución". La declaración, por ejemplo int tabla[h][v]; tendría que estar, por ejemplo, dentro de loop()

Code: [Select]
loop()
{
int tabla[h][v];
...
...
}


pero eso impediría el acceso directo a ese array por parte de otras funciones y loop() tendría que proporcionarles ese acceso. Por ejemplo:

Code: [Select]


funcionJ(int valor)
{
....
}

loop(){
int tabla[h][v];
...
...
funcionJ(tabla[3][5]);

}


Otra posibilidad es usar un array (global) lo bastante grande que cubra el peor de los casos y luego utilizar algún tipo de índice que indique qué parte de la capacidad total del array se está empleando actualmente.




Go Up