Возврат указателя на строку из функции: memory leak?
От: S.T.A.L.I.N  
Дата: 28.06.09 21:45
Оценка:
Доброго времени суток.

Предположим у нас есть следующий код:


...

#define N <целое число>

...

wchar_t * function() {
   ...
   wchar_t * wcResult = NULL;
   ...
   wcResult = new wchar_t[N];
   ...
   return wcResult;
}


Далее:


...

wchar_t * wcSomeString = new wchar_t[N];
wcscpy_s(wcSomeString, N, function());
...

delete [] wcSomeString;


Что же получается? Память, которая выделена строке в function(), так и остаётся "висеть", т.е. Heap Memory Leak?

И ещё. Интересно, что если не копировать возвращаемую функцией строку в новую, а просто создать указатель и присвоить ему адрес возвращаемой из function() строки, то при попытке удалить такой указатель в конце блока {}:

1. В Debug режиме в VS2005 возникает Assertion на закрытие приложения: программа пытается очистить уже очищенную нами память.
2. В Release режиме в VS2005 всё в порядке.

У кого какие мысли на эту тему?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.