Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |
Либо я что то не понимаю, либо одно из двух 18.10.01 10:18 Число просмотров: 988
Автор: PS <PS> Статус: Elderman
|
> dlia static lib: Potomu chto heap v kazdoii dl(exe)l svoi i > kogda ty allociroval v exe(dll) a dealociruesh v drugoi > dll, to pointer ne mozhet byt` dealocirovan v drugoi heap, > i vse padaet. > a kogda v mfc dll to memory allociruetsia na heape mfc.dll > (ili c-runtime dll) i dealociruetsia tam zhe i vse ok. > I uzhe pro eto pisal i dazhe primer vylozhil.
Статические библиотеки присоеденяются полностью к твоему exe'шнику, увеличивая его на свой размер. Никаких DLL при этом вызыватся не должно. ВЕСЬ код находится в твоем процессе.
Во вторых никаких new я не делал. Все переменые были статическими, поэтому о хипе говорить нельзя.
По этим двум причинам я не могу принять твое объяснение.
|
<programming>
|
Неожиданность с MFC 17.10.01 10:44
Автор: PS <PS> Статус: Elderman
|
Итак приложение построенно как dialog based.
Конструктор:
CIViewDlg* mainDlg;
CIViewDlg::CIViewDlg(CWnd* pParent =NULL)
: CDialog(CIViewDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CIViewDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
server = Server::CreateTh( );
mainDlg = this;
}
Есть ф-я:
void CIViewDlg::OnSetserver()
{
server->CreateThread( CREATE_SUSPENDED );
server->ResumeThread( );
}
Есть класс Server от CWinThread. Есть статическая ф-я:
Server* Server::CreateTh( )
{
return new Server;
}
В Run Server'а такой код:
CSocket sock;
CSocket sock2;
CString address;
mainDlg->GetDlgItemText( IDC_EDIT1, address );
mainDlg->SetDlgItemText( IDC_EDIT4, "Binding..." );
if( sock.Create( 80, SOCK_STREAM, address ) == FALSE )
{
return 0;
}
ПАДАЕТ ПО ПАМЯТИ НА sock.Create ! В Kernel
Итак, в главном thread завожу объект потока. Запускаю поток. В Run потока есть локальная переменая сокета. При вызове Create для сокета все падает.
Что бы это значало ?
P.S. В debug все работает. В release - нет.
|
 |
Все исправилось 17.10.01 11:27
Автор: PS <PS> Статус: Elderman
|
Стоило только в настройках проекта поменять Use MFC in a static library на Use MFC in a Shared DLL.
Хотя не понятно, что это за дескременация статических библиотек...
|
 |  |
Bce prosto 17.10.01 22:35
Автор: + <Mikhail> Статус: Elderman
|
> Стоило только в настройках проекта поменять Use MFC in a > static library на Use MFC in a Shared DLL. > Хотя не понятно, что это за дескременация статических > библиотек...
dlia static lib: Potomu chto heap v kazdoii dl(exe)l svoi i kogda ty allociroval v exe(dll) a dealociruesh v drugoi dll, to pointer ne mozhet byt` dealocirovan v drugoi heap, i vse padaet.
a kogda v mfc dll to memory allociruetsia na heape mfc.dll (ili c-runtime dll) i dealociruetsia tam zhe i vse ok.
I uzhe pro eto pisal i dazhe primer vylozhil.
|
 |  |  |
Либо я что то не понимаю, либо одно из двух 18.10.01 10:18
Автор: PS <PS> Статус: Elderman
|
> dlia static lib: Potomu chto heap v kazdoii dl(exe)l svoi i > kogda ty allociroval v exe(dll) a dealociruesh v drugoi > dll, to pointer ne mozhet byt` dealocirovan v drugoi heap, > i vse padaet. > a kogda v mfc dll to memory allociruetsia na heape mfc.dll > (ili c-runtime dll) i dealociruetsia tam zhe i vse ok. > I uzhe pro eto pisal i dazhe primer vylozhil.
Статические библиотеки присоеденяются полностью к твоему exe'шнику, увеличивая его на свой размер. Никаких DLL при этом вызыватся не должно. ВЕСЬ код находится в твоем процессе.
Во вторых никаких new я не делал. Все переменые были статическими, поэтому о хипе говорить нельзя.
По этим двум причинам я не могу принять твое объяснение.
|
 |  |  |  |
Nu, Nu. :-) 18.10.01 20:18
Автор: + <Mikhail> Статус: Elderman
|
Tvoi analis ochen vpechetliaet (v terminah zaputalsia, sam sebe protivorechish). I tebia verit ne zastavliau. I obiasnil prichinu, esli hochesh oprovergnut` to snachala prover` na praktike, a potom vse somnenia otpadut, Enshtein ty nash. :-)
> > dlia static lib: Potomu chto heap v kazdoii dl(exe)l > svoi i > > kogda ty allociroval v exe(dll) a dealociruesh v > drugoi > > dll, to pointer ne mozhet byt` dealocirovan v drugoi > heap, > > i vse padaet. > > a kogda v mfc dll to memory allociruetsia na heape > mfc.dll > > (ili c-runtime dll) i dealociruetsia tam zhe i vse > ok. > > I uzhe pro eto pisal i dazhe primer vylozhil. > > Статические библиотеки присоеденяются полностью к твоему > exe'шнику, увеличивая его на свой размер. Никаких DLL при > этом вызыватся не должно. ВЕСЬ код находится в твоем > процессе. > Во вторых никаких new я не делал. Все переменые были > статическими, поэтому о хипе говорить нельзя. > По этим двум причинам я не могу принять твое объяснение.
|
|
|