Указатель C ++ «ошибка: двойное освобождение или повреждение (выход)» - PullRequest
2 голосов
/ 28 марта 2012

Это мой код:

uint16_t * ptemparr = new uint16_t[20];
for (int x=0;x<2;x++)
{
   function(ptemparr);
   ptemparr ++;

}
delete[] ptemparr;

Когда я это делаю, я получаю эту ошибку:

double free or corruption (out)

Редакция: Спасибо, я понял, почему я получаю эту ошибку, теперь вы думаете, что это лучшая идея?

uint16_t temparr[20];
uint16_t * ptemparr = temparr;
for (int x=0;x<2;x++)
{
   function(ptemparr);
   ptemparr ++;

}

Таким образом, я делаю указатель на стек, и нет проблем с утечкой памяти. Кроме того, приведенный выше код должен выполняться каждые 1 секунду, поэтому, пожалуйста, помните об этом, прежде чем дать мне знать, что является лучшим методом кодирования для этой ситуации

Ответы [ 3 ]

5 голосов
/ 28 марта 2012

Вам нужно передать тот же адрес на delete [], который был возвращен new [].
Также убедитесь, что function() не deallocate the memory by calling удаляет переданный указатель.

0 голосов
/ 28 марта 2012

Вам необходимо delete тот же адрес, который возвращается new.

Я всегда заставляю свои циклы выравнивать эту работу с копией исходного указателя и никогда не изменяю исходный указатель, возвращаемый malloc или new.

0 голосов
/ 28 марта 2012

вам нужно сбросить ptemparr на его домашний адрес, поскольку вы увеличиваете его в цикле for.поэтому я предлагаю уменьшить его на 2, прежде чем удалять.

ptemparr-=2;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...