Это мой код:C++ указатель "ошибка: двойной бесплатно или повреждение (уходит)"
uint16_t * ptemparr = new uint16_t[20];
for (int x=0;x<2;x++)
{
function(ptemparr);
ptemparr ++;
}
delete[] ptemparr;
Когда я делаю это я получаю эту ошибку:
double free or corruption (out)
EDITED: Спасибо I понял, почему я получаю эту ошибку, теперь вы думаете, что это лучшая идея?
uint16_t temparr[20];
uint16_t * ptemparr = temparr;
for (int x=0;x<2;x++)
{
function(ptemparr);
ptemparr ++;
}
Таким образом, я делаю указатель на стек, и проблема с утечкой памяти отсутствует. Кроме того, этот код выше должен выполняться раз в 1 сек, поэтому, пожалуйста, обнажить это в виду, прежде чем дать мне знать, что это лучшая практика кодирования для этой ситуации
Почему вы не используете скобки для индексирования? – tartar
funtion возвращает массив внутри ptemparr, приведенный выше код предназначен только для иллюстрации, а ++ - это в действительности ptemparr = ptemparr + 4 – Kam
@Kam. Если вы всегда выделяете x (x = 20 в фрагменте кода), тогда вы Лучше использовать статическое распределение, даже если одна секунда «довольно редко», и разница между статическим и динамическим распределением будет иметь тенденцию исчезать за это время. Затем использование стека или кучи является вопросом вкуса: если к этому вектору нужно получить доступ за пределами блока, куча является обязательной. – Enzo