Но Вы посмотрели на свою память из последнего примера MemoryExplorer'ом? Красиво?
Не, ещё не успел, у меня всё дома. Но примерно понял, а исправление моего кода возвращает к мысли, что размер массива всё-таки должен быть заранее определён. И проще зарезервировать больше памяти для одного массива.
uint8_t * arrRemake(uint8_t newArr[], uint8_t arr[], uint8_t &lenArr) {
for (uint8_t i=0; i < lenArr; i++) newArr[i] = arr[i];
delete[] arr; arr = nullptr;
newArr[lenArr] = 5;
lenArr = lenArr + 1;
return newArr;
}
void setup() {
Serial.begin(9600);
uint8_t lenArr = 5;
uint8_t* newArr = new uint8_t[lenArr+1];
uint8_t* arrIn = new uint8_t[lenArr];
for (uint8_t i = 0; i < lenArr; i++) arrIn[i] = i;
Serial.print("arrIn= ");
for (uint8_t i; i < lenArr; i++) {
Serial.print(arrIn[i]);
Serial.print(" ");
}
Serial.println();
uint8_t* arrOut = arrRemake(arrIn, lenArr);
Serial.print("arrOut= ");
for (uint8_t i; i < lenArr; i++) {
Serial.print(arrOut[i]);
Serial.print(" ");
}
Serial.println();
delete[] arrOut; arrOut = nullptr;
}
void loop() {}
Но Вы посмотрели на свою память из последнего примера MemoryExplorer'ом? Красиво?
Но Вы посмотрели на свою память из последнего примера MemoryExplorer'ом? Красиво?
Не, ещё не успел, у меня всё дома. Но примерно понял, а исправление моего кода возвращает к мысли, что размер массива всё-таки должен быть заранее определён. И проще зарезервировать больше памяти для одного массива.
uint8_t * arrRemake(uint8_t newArr[], uint8_t arr[], uint8_t &lenArr) { for (uint8_t i=0; i < lenArr; i++) newArr[i] = arr[i]; delete[] arr; arr = nullptr; newArr[lenArr] = 5; lenArr = lenArr + 1; return newArr; } void setup() { Serial.begin(9600); uint8_t lenArr = 5; uint8_t* newArr = new uint8_t[lenArr+1]; uint8_t* arrIn = new uint8_t[lenArr]; for (uint8_t i = 0; i < lenArr; i++) arrIn[i] = i; Serial.print("arrIn= "); for (uint8_t i; i < lenArr; i++) { Serial.print(arrIn[i]); Serial.print(" "); } Serial.println(); uint8_t* arrOut = arrRemake(arrIn, lenArr); Serial.print("arrOut= "); for (uint8_t i; i < lenArr; i++) { Serial.print(arrOut[i]); Serial.print(" "); } Serial.println(); delete[] arrOut; arrOut = nullptr; } void loop() {}что-то какая-то жуть в коде... зачем это все?
Ну и явная ошибка - arrRemake описана с тремя параметрами, а вызывается с двумя
что-то какая-то жуть в коде... зачем это все?
Ну и явная ошибка - arrRemake описана с тремя параметрами, а вызывается с двумя
Уже незачем - пример избыточного кода. )
arrRemake - да, ошибся, не компилировал.