CStdioFile Handle Leak - PullRequest
       12

CStdioFile Handle Leak

3 голосов
/ 03 июля 2019

Я использую программу проверки памяти, которая сообщает о дескрипторах, оставшихся в использовании при завершении программы. Я сузил это до CStdioFile звонков. Похоже, что любые CStdioFile, открытые в InitInstance или в диалоговом окне главного окна OnInitDialog в приложении Dialog, оставляют маркеры, лежащие вокруг.

Это скорее любопытство, чем проблема, но я бы хотел понять это, если это проблема, и я неправильно ее понимаю.

Итак, я взял небольшое приложение (здесь показано InitInstance) и вставил немного кода, чтобы проверить его, и, конечно же, я получил утечку дескриптора. Если я изменю CStdioFile на CFile и открою файл, он не сообщит об утечке.

Я положил открытое в фигурные скобки, чтобы посмотреть, исправит ли его разрушение после использования. Я пытался специально закрыть файл, и это не помогает.

BOOL CMyApp::InitInstance()
{
    AfxEnableControlContainer();

    {
    CStdioFile fFile;  // Change to a CFile to get no leaks.
    fFile.Open("mytestfile.txt", CFile::modeRead);
    }


    // Standard initialization
    // If you are not using these features and wish to reduce the size
    //  of your final executable, you should remove from the following
    //  the specific initialization routines you do not need.

#ifdef _AFXDLL
    //Enable3dControls();           // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();   // Call this when linking to MFC statically
#endif

    CMyDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {

    }
    else if (nResponse == IDCANCEL)
    {

    }

    // Since the dialog has been closed, return FALSE so that we exit the
    //  application, rather than start the application's message pump.
    return FALSE;
}

Я хотел бы видеть утечки, чтобы знать, что код чистый. И мне действительно любопытно, почему CFile и CStdioFile ведут себя по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...