Автор
|
Тема: new & delete в разных потоках
|
ash |
опубликован 28-01-2002 06:32 MSK
//Исполняющая функция потока 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
Прошу прощения за грамматические ошибки. Конечно же Thread. |
rodion
|
опубликован 28-01-2002 09:04 MSK
Использовать delete по моему вполне коректно, если сомневаешся проверь вызов деструктора. |
ash
|
опубликован 28-01-2002 09:32 MSK
Вызов деструктора сомнений не вызывает. Сомнения вызывает освобождение памяти. |
ADK
|
опубликован 28-01-2002 10:13 MSK
Я так делал, вроде всё нормально было. BoundsChecker не ругался. Если у тебя строго память выделяется в одном потоке, а осв. в др., то, думаю, всё в порядке. |
Flex Ferrum
|
опубликован 28-01-2002 15:48 MSK
Корректно, если пользуешься Multithread RTL |
Muran
|
опубликован 28-01-2002 16:09 MSK
Вроде все нормально, но лучше всегда проверять на NULL каждый указатель,который ты хочешь удалить. if(pData!=NULL) delete pData |
x
|
опубликован 29-01-2002 02:43 MSK
Все o.b. по одной простой причинеon VC6 new() = LocalAlloc(LMEM_FIXED,size) delete(LPVOID ptr)= LocalFree(LocalHandele(ptr)) значит что если памяти нет то ошибок не будет ошибок не будет даже если ты ПРОСТО ПОПАДЕШЬ В ПРОИЗВОЛЬНОЕ МЕСТО ВЫДЕЛЕННЛГО БЛОКА ИЛИ НЕ ПОПАДЕШЬ НИКУДА |
ash
|
опубликован 29-01-2002 05:13 MSK
Всем спасибо. |
tonik
|
опубликован 30-01-2002 04:05 MSK
Что касается "попутных" вопросов, то память для стандартного new выделяется из стандартной кучи процесса, а стек размещается в свободной области адресного пространства. |
golem
|
опубликован 30-01-2002 19:09 MSK
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
По пути. Почему код delete указатель не обнуляет? Недодумали? |