Утекание памяти при копировании массива

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Но Вы посмотрели на свою память из последнего примера MemoryExplorer'ом? Красиво?

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

ЕвгенийП пишет:

Но Вы посмотрели на свою память из последнего примера 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() {}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

AndreyD пишет:
проще зарезервировать больше памяти
Если она есть.

b707
Offline
Зарегистрирован: 26.05.2017

что-то какая-то жуть в коде... зачем это все?

Ну и явная ошибка - arrRemake описана с тремя параметрами, а вызывается с двумя

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

b707 пишет:

что-то какая-то жуть в коде... зачем это все?

Ну и явная ошибка - arrRemake описана с тремя параметрами, а вызывается с двумя

Уже незачем - пример избыточного кода. )

arrRemake - да, ошибся, не компилировал.