ok i punti 1 e 2 però
ma un gioco con arduino non è safety critical. In altre circostanze c'è da tenere conto di questo aspetto.
insomma. la ram esaurita è una delle cose più difficili da debuggare su un'arduino, e cose del geenre non aiutano.
(conosco gente che programma a oggetti anche con il c ma questo non fa per me)
vorrei conoscere questa gente... il C non è ad oggetti, si può simulare il comportamento degli oggetti... e in pratica riscrivi il C++
E ultima cosa ecco i tuoi errori:
hai ragione, scivo il codice a lavoro e ogni tanto dimentico di avvisare che non è nemmeno testato in compilazione.
Comunque NULL invece che null, la realloc vuole anche il puntatore all'array da incrementare, e tulle le alloc ritorano un puntatore a void (generico) che va castato in quello che ti interessa
codice compilabile:
int* changeDim(int* vector, int newDim){
if (vector != NULL ){
int* newArray = (int*)realloc(vector, newDim*sizeof(int) );
if (newArray != NULL){
vector = newArray ;
return vector;
}
newArray = (int*)malloc( newDim*sizeof(int) );
if (newArray != NULL){
for (int var = 0; var < newDim; ++var)
newArray[var] = vector[var];
free(vector);//dealloca la ram
vector = newArray;
return vector;
}
}
return NULL;
}
volendo si possono usare i puntatori void per rendere la funzione più generica (notare che non si possono usare gli indici o giocare con gli indirizzi nei puntatori void e quindi li casto ad array di byte, in alcuni compilatori non è necessario):
void* changeDim(void* vector, int newDim, int sizeOfType){
if (vector != NULL ){
void* newArray = realloc(vector, newDim*sizeOfType );
if (newArray != NULL){
vector = newArray;
return vector;
}
newArray = malloc( newDim*sizeOfType );
if (newArray != NULL){
for (int var = 0; var < newDim*sizeOfType; var++)
((byte*)newArray)[var] = ((byte*)vector)[var];
free(vector);//dealloca la ram
vector = newArray;
return vector;
}
}
return NULL;
}
esempio di uso
int* array = (int*)malloc(sizeof(int)*16); //da 16
array = (int*)changeDim(array, 20, sizeof(int)); //a 20
edit:in fine ricorderei che non ci troviamo davanti a vero C o vero C++, tantè che fino a 5 o 6 mesi fa non esisteva la new o la delete.