Mega 2560 Funcion que devuelve array


hola todos, estoy programando un placa arduino y estoy utilizando c++ ,

tengo algunos conocimientos de otros lenguajes como java, javascript, php... pero de c++ no estoy muy puesto

pues bien este es mi problema, creo que es algo bastante sencillo pero no consigo el resultado adecuado.

tengo 3 variales

code: [select]
//elementos
int elemento1 = 1;
int elemento2 = 2;
int elemento3 = 3;


y un array de 5 elementos tipo int;

code: [select]
int* array_1;
int* array_2;
int* array_3;


pues bien , creo una funcion que recibe un elemento , calcula los primeros elementos de la tabla de mutiplicar:
y devuelve el array con los elemtos


code: [select]
/**
   calculo de los valores y carga en un array
*/
int*  carga_array (int valor) {

  //declaracion de array temporal y lo devuelvo
  int* array_temp;;

  //calculo de las variables
  array_temp[0] = valor;
  array_temp[1] = valor * 1;
  array_temp[2] = valor * 2;
  array_temp[3] = valor * 3;
  array_temp[4] = valor * 4;

  return array_temp;

}


y otra funcion que los muestra pon una consola

code: [select]
/**
  mostrar por pantalla
*/
void mostrar(int* datos) {

  serial.println("************elemento : " + (string)datos[0] + " **************************");
  serial.println("elemento 1: " + (string)datos[1]);
  serial.println("elemento 2: " + (string)datos[2]);
  serial.println("elemento 3 : " + (string)datos[3]);
  serial.println("elemento 4 : " + (string)datos[4]);
  serial.println("********************************************************************");

}



//en el loop declaro

code: [select]

//carga del array_1 con los datos de la funcion
array_1=carga_array(elemento1);

//lo mostramos por pantalla
mostrar(array_1);


pues bien por consola, nos muestra datos correctos.
code: [select]
************elemento : -256 **************************
elemento 1: 256
elemento 2: -16270
elemento 3 : 8703
elemento 4 : 770
********************************************************************


creo que tiene algo que ver con la referencia la memoria  de los elementos del array,

tambien  tengo problemas la hora de definir el tamaño correcto de los array, de ahi que tengan esa anotacion int* que no se lo que significa

como podria ejecutar este ejercicio?

agradeceria mucho vuestra ayuda

tengo algunos conocimientos de otros lenguajes como java, javascript, php... pero de c++ no estoy muy puesto
me doy cuenta. aquí la manera de manejar la memoria es más "manual".

code: [select]
int* array_temp;;
esto es un puntero de memoria, una variable que almacena una dirección de memoria; el tipo de dato solo indica cómo debe interpretarse el contenido en la posición (entre otras cosas). puede apuntar un array (que aquí es simplemente espacio contiguo destinado para tal función), pero no es así como se crea.

retornar int* es solo retornar el puntero. no estoy seguro de qué sucede al hacerlo si se devuelve la referencia un array creado dentro de la función; hay dos posibilidades:

  • el espacio se "libera" (solo se considera libre, no borra nada inmediatamente), lo que convertiría al puntero retornado, en una referencia espacio libre o array que potencialmente se puede modificar inesperadamente.
  • al retornarlo, el compilador entienda que ese espacio debe mantenerse asignado aunque la función muera; lo que llevaría la "fuga de memoria" si el llamador no almacena el puntero resultante.

como el puntero solo se declara y no el array en sí, el resultado fue modificar los primeros 10 bytes de la memoria ram, o desde alguna posición aleatoria. tuviste suerte que no se te colgara el programa.

a diferencia de lenguajes como java, el c++ de arduino no implementa excepciones; en su lugar tenemos el "comportamiento indefinido", que es todavía peor porque puede provocar cuelgues cuya causa no es tan fácil de localizar.


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Mega 2560 Funcion que devuelve array


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???