Утечка памяти в указателе символа - PullRequest
1 голос
/ 06 марта 2011

Если быть точным, моя программа использует указатели на char. Сама программа работает без сбоев, но в каждом цикле я теряю около 8 КБ данных. Как я выяснил, моя ошибка заключается в моем стиле использования этих символьных указателей. Это выглядит так:

Draw(char *what1, char* onWhat1);  //this is declaration
DrawAgain(char *what2, char* onWhat2); //declaration too

// both take two directories to two images, so i call it like this:

Draw("C:\a.bmp", "C:\b.bmp"){

//so what is pointer to a.bmp onWhat is pointer to b.bmp so i use them like this:

DrawAgain(what1, onWhat1);
}

Других утечек в программе нет (я удалил почти все, чтобы это выяснить). Итак, мой вопрос: «Как мне освободить эту * символьную память? И могу ли я ее освободить, если я ее не выделил, просто набрал».

Ответы [ 4 ]

4 голосов
/ 06 марта 2011

Строковые литералы не должны быть освобождены, так как они не выделяются динамически.Утечка не лежит в примере кода.Из C ++ 03, § 5.13.4-1 Строковые литералы:

Обычный строковый литерал имеет тип «массив из n const char» и статический продолжительность хранения (3.7) [...] Широкий строковый литерал имеет тип «массив n const wchar_t» и имеет статическую продолжительность хранения

1 голос
/ 06 марта 2011

Нет утечки. Если вы не выделяете память, используя new, вы не обязаны delete, если явно не указано иное. В общем, тот, кто выделяет память, несет ответственность за ее освобождение. Тем не менее, многие популярные библиотеки все еще имеют утечки в них. Если char* будет массивом или чем-то подобным, который был динамически размещен в куче, вам нужно удалить его из того места, где он был размещен (не в этих функциях).

С уважением,
Деннис М.

0 голосов
/ 06 марта 2011

Пожалуйста, отправьте ваш полный код, чтобы мы могли найти проблему.

Также вы можете проверить:

Draw("C:\a.bmp", "C:\b.bmp")

'\' экранируется от 'a' соответствующего 'b'.

0 голосов
/ 06 марта 2011

В коде есть еще одна проблема.Я создал точку OpenCV, а затем возвратил ей значение из функции, это выглядит так:

CvPoint Value;

bool Calculations( CvPoint &worker); //declaration
//So i give this function Value and take it out like this:
Calculations(Value){
worker = someValue;
}

Значение выходит, но я не вызываю free () или любой размен;

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