информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Bce prosto 17.10.01 22:35  Число просмотров: 884
Автор: + <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.
<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 я не делал. Все переменые были
> статическими, поэтому о хипе говорить нельзя.
> По этим двум причинам я не могу принять твое объяснение.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach