WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  new & delete в разных потоках

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   new & delete в разных потоках
ash опубликован 28-01-2002 06:32 MSK   Click Here to See the Profile for ash   Click Here to Email ash  
//Исполняющая функция потока
UINT ThreadProc(LPVOID pParam)
{
DataObject* pData=(DataObject*)pParam;
//...
delete pData;
return 0;
}

//...
//Вызов в основном потоке
pDataObject=new DataObject;
AfxBeginTread(TreadProc,pDataObject);
//...

Вопрос: корректно ли такое использование delete?
Попутные вопросы:
Откуда выделяется память при использовании new?
Откуда выделяется память под стек потока?

ash опубликован 28-01-2002 06:36 MSK     Click Here to See the Profile for ash  Click Here to Email ash     
Прошу прощения за грамматические ошибки. Конечно же Thread.
rodion опубликован 28-01-2002 09:04 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
Использовать delete по моему вполне коректно, если сомневаешся проверь вызов деструктора.
ash опубликован 28-01-2002 09:32 MSK     Click Here to See the Profile for ash  Click Here to Email ash     
Вызов деструктора сомнений не вызывает. Сомнения вызывает освобождение памяти.
ADK опубликован 28-01-2002 10:13 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Я так делал, вроде всё нормально было. BoundsChecker не ругался. Если у тебя строго память выделяется в одном потоке, а осв. в др., то, думаю, всё в порядке.
Flex Ferrum опубликован 28-01-2002 15:48 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Корректно, если пользуешься Multithread RTL
Muran опубликован 28-01-2002 16:09 MSK     Click Here to See the Profile for Muran  Click Here to Email Muran     
Вроде все нормально, но лучше всегда проверять на NULL каждый указатель,который ты хочешь удалить.
if(pData!=NULL)
delete pData
x опубликован 29-01-2002 02:43 MSK     Click Here to See the Profile for x  Click Here to Email x     
Все o.b. по одной простой причине

on VC6

new() = LocalAlloc(LMEM_FIXED,size)

delete(LPVOID ptr)= LocalFree(LocalHandele(ptr))

значит что если памяти нет то ошибок не будет

ошибок не будет даже если ты ПРОСТО ПОПАДЕШЬ В ПРОИЗВОЛЬНОЕ МЕСТО ВЫДЕЛЕННЛГО БЛОКА ИЛИ НЕ ПОПАДЕШЬ НИКУДА

ash опубликован 29-01-2002 05:13 MSK     Click Here to See the Profile for ash  Click Here to Email ash     
Всем спасибо.
tonik опубликован 30-01-2002 04:05 MSK     Click Here to See the Profile for tonik  Click Here to Email tonik     
Что касается "попутных" вопросов, то память для стандартного new выделяется из стандартной кучи процесса, а стек размещается в свободной области адресного пространства.
golem опубликован 30-01-2002 19:09 MSK     Click Here to See the Profile for golem  Click Here to Email golem     
1) Na schet new=LocalAlloc - gon. new=malloc,
a u RTL svoy raspredelitel' pamyati, kotoryi v konechnom
itoge vyzyvaet API funkcii, no ne kazhdyi raz.
2) delete i free bezopasny otnositel'no NULL.
Proveryat' ukazatel' ne nuzhno.
ye опубликован 30-01-2002 20:24 MSK     Click Here to See the Profile for ye  Click Here to Email ye     
По пути.
Почему код delete указатель не обнуляет?
Недодумали?

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.