Этот вопрос гораздо более связан с C, чем OpenCV. Например, такие:
CvScalar b1;
CvScalar f;
CvPoint pt;
являются локальными переменными, и поэтому они автоматически dealocatted, когда объем { }
они принадлежат завершении выполнения.
Это:
CvPoint *point;
является указателем, и в то же время является локальной переменной. Вы не должны delete
или free()
, потому что вы не выделили для него никакой памяти через new
или malloc()
. Это вызовет проблемы (возможно, сбой).
Но data
с другой стороны:
float *data = (float*)resd->imageData;
является указателем и локальная переменная, которая содержит блок памяти. Тем не менее, это не разумно delete[] data;
или free(data)
в этом конкретном случае, потому что вы не выделили эту память напрямую. Очевидно, что эта память была выделена как часть resd
, что означает, что вам нужно проверить код и узнать, как была объявлена / инициализирована переменная resd
, а затем выполните соответствующую процедуру для ее выпуска. Поскольку я знаю бит litle об OpenCV, я могу сказать, что resd
- это IplImage*
. Если вы использовали cvCreateImage()
, чтобы создать эту переменную, то это также ваша работа по ее выпуску с cvReleaseImage()
.
В прошлом:
CvPoint* ptsCorner=(CvPoint*) malloc(3*sizeof(ptsCorner[0]));
Это типичный случай динамического распределения памяти, где конкретно выделить объем памяти. Поскольку ptsCorner
- это локальная переменная и указатель, когда область, к которой он принадлежит, заканчивает выполнение, вы потеряете ссылку на этот блок памяти, и она будет просто потеряна в вашей ОЗУ, освободит пространство памяти и вызовет утечку. Нет необходимости говорить, что вы должны выполнить free()
, чтобы освободить память в этом случае.
Добавить объявление, весь код очень длинный, но я думаю, теперь яснее, btw Я не использую новый, поэтому я думаю, что мне нужно выпустить только плавающие * данные (я пытаюсь удалить, но я получаю время выполнения ошибка) и * ptsCorner – andrea
Где вы используете malloc, вам нужно будет использовать free() для восстановления памяти. Будьте осторожны, если это массив, который вам нужно вызвать free() для каждого члена массива. Много учебников о том, как это сделать – TomP89