Estoy creando una librería y tengo una duda con los new y delete.
Si tengo una variable char *texto que inicializo con texto = new char[X] cuando quiera reciclar esa variable y darle un nuevo tamaño texto = new char[Y] debería de hacer un delete o free antes del new?
No sabía que podían usarse, per veo que si.
Acá un ejemplo que tal vez te ayude a entenderlos
void setup() {
Serial.begin(9600);
}
void loop() {
char* array;
char c;
unsigned arraySize;
Serial.write("Enter a 1 digit number.\n");
do {
c = Serial.read();
} while(c < '0' or c > '9');
arraySize = c-'0';
Serial.write("You wrote ");
Serial.write(c);
Serial.write(".\n");
Serial.write("Now enter ");
Serial.write(c);
Serial.write(" lower-case letters.\n");
array = new char[arraySize];
for (unsigned i = 0; i < arraySize;) {
array[i] = Serial.read();
if (array[i] >= 'a' and array[i] <= 'z')
i++;
}
Serial.write("You entered: ");
for (unsigned i = 0; i < arraySize; i++) {
Serial.write(array[i]);
Serial.write(" ");
}
Serial.write("\n");
}
Here is a sample output to demonstrate its functionality:
Aque la salida del ejemplo mostrando su funcionalidad
Enter a 1 digit number.
You wrote 5.
Now enter 5 lower-case letters.
You entered: h e l l o
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: w a s s u p m a n
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: h o w y a d o i n
Enter a 1 digit number.
You wrote 4.
Now enter 4 lower-case letters.
You entered: c o o l
Enter a 1 digit number.
You wrote 7.
Now enter 7 lower-case letters.
You entered: i t w o r k s
Enter a 1 digit number.
En el ejemplo que te postee. No borran array y sin embargo siempre muestra el valor que se le asigna.
Supongo (no estoy 100% seguro) que no hace falta borrarlo.
Lo único que me preocupa si esto va consumiendo RAM.
Hola.
Efectivamente, deberías llamar al operador delete (delete[] texto), y comprobar como te sugirió surbyte la memoria disponible en tiempo de ejecución, pues con asignación dinámica de memoria, a la mínima podemos sufrir una sangría que a corto o largo plazo nos vaya comiendo la ya de por sí escasa memoria del arduino. Primero deberías ver si es necesario utilizar en tu proyecto la asignación dinámica, o tienes otras opciones más prácticas.
Saludos
noter:
Hola.
Efectivamente, deberías llamar al operador delete (delete[] texto), y comprobar como te sugirió surbyte la memoria disponible en tiempo de ejecución, pues con asignación dinámica de memoria, a la mínima podemos sufrir una sangría que a corto o largo plazo nos vaya comiendo la ya de por sí escasa memoria del arduino. Primero deberías ver si es necesario utilizar en tu proyecto la asignación dinámica, o tienes otras opciones más prácticas.
Saludos
Gracias, en este caso creo que no tengo otra opción ya que esa función esta dentro de una clase botón y lo que hago es que le voy cambiando el texto según los archivos que leo ya que el objeto lo reciclo.