New.cpp запрограммирован неправильно? Ардуино 1.8.9
У меня проблемы с кодом, и я не уверен, что это проблема с распределением памяти. Итак, я просматриваю новый, удаляю, чтобы посмотреть, не выдает ли он ошибки, и, найдя исходный код, нахожу невероятно простые коды. Так просто, что я думаю, что это невозможно.
#include <stdlib.h>
void *operator new(size_t size) {
return malloc(size);
}
void *operator new[](size_t size) {
return malloc(size);
}
void operator delete(void * ptr) {
free(ptr);
}
void operator delete[](void * ptr) {
free(ptr);
}
Означает ли это, что если я вызову customClass *ptr = new customClass[10];
, он выделит только 10 байт вместо sizeof(customClass)*10
?
@Enrique Mendez, 👍1
Обсуждение1 ответ
http://www.cplusplus.com/reference/new/operator%20new[]/ :
В C++ new[] — это оператор с очень специфическим поведением: выражение с новым оператором для типа массива, сначала вызывает новый оператор функции (т. е. эта функция) с размером ее массива спецификатор типа в качестве первого аргумента (плюс любые служебные данные массива для отслеживать размер, если он есть), и если это удастся, то автоматически инициализирует или создает каждый объект в массиве (если нужный). Наконец, выражение оценивается как указатель на соответствующий тип, указывающий на первый элемент массива.
- Есть ли ограничения на размер массива в Arduino Mega 2560?
- Как масштабировать растровое изображение (массив uint8_t) в Arduino?
- Как я могу присвоить значение массива символов массиву uint8_t?
- Самый прямой способ назначить байты Serial.read() массиву?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Как работать с аналоговыми контактами в цикле?
когда вы делаете
new customClass[10]
, это не означаетsize_t size
= 10, @Jaromanda X@JaromandaX Да... Я понял это после того, как опубликовал вопрос..., @Enrique Mendez