Ciao,
forse mi sto perdendo in un bicchiere d'acqua, ma ho un dubbio sulla gestione della memoria, e non so come verificarlo in Arduino!
Le seguenti soluzioni, sono equivalenti in merito alla de-allocazione della memoria?
Nel secondo caso, arrLoc, viene liberata normalmente come tutte le variabili locali? Vero?
Ho visto usare la terza soluzione, ma non mi è chiara l'utilità rispetto alle altre!
In questi mesi, al bisogno, ho usato la prima soluzione, ma dopo aver visto la terza, la questione mi ha incuriosito.
void setup() {
Serial.begin(9600);
//1: passo array come riferimento dopo averla allocata
uint8_t* arr1 = (uint8_t *)malloc(4);
getArray1(arr1, 4);
for(byte i = 0; i < 4; i++) {
Serial.println(arr1[i]);
}
free(arr1);
//2: creo array nella funzione
uint8_t* arr2 = getArray2(4);
for(byte i = 0; i < 4; i++) {
Serial.println(arr2[i]);
}
free(arr2);
//3:
uint8_t* arr3;
arr3 = getArray3(arr3, 4);
for(byte i = 0; i < 4; i++) {
Serial.println(arr3[i]);
}
free(arr3);
}
//1:
void getArray1(uint8_t* arr, uint8_t len) {
//... riempio array
arr[0] = 11;
arr[1] = 12;
arr[2] = 13;
arr[3] = 14;
}
//2:
uint8_t* getArray2(uint8_t len) {
//inizializzo array (memoria)
uint8_t* arrLoc = (uint8_t *)malloc(len);
//... riempio array
arrLoc[0] = 21;
arrLoc[1] = 22;
arrLoc[2] = 23;
arrLoc[3] = 24;
return (uint8_t*)arrLoc;
}
//3:!!!! perchè?
uint8_t* getArray3(uint8_t* arr, uint8_t len) {
//inizializzo array (memoria)
arr = (uint8_t *)malloc(len);
//... riempio array
arr[0] = 31;
arr[1] = 32;
arr[2] = 33;
arr[3] = 34;
return (uint8_t*)arr;
}
TIA
Federico