初学VC,请问用NEW申请的空间如何释放,什么时间,如何释放?

发布: 2010-1-14 10:28 | 作者: billtian | 来源: StmFans思蜕盟 OPELC 自由电子联盟

// CMFCCommAssistDlg 消息处理程序

BOOL CMFCCommAssistDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // 将\“关于...\”菜单项添加到系统菜单中。

        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
                CString strAboutMenu;
                strAboutMenu.LoadString(IDS_ABOUTBOX);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }

        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);                        // 设置大图标
        SetIcon(m_hIcon, FALSE);                // 设置小图标

        // TODO: 在此添加额外的初始化代码
       
        //////////////////////////////////////////////////////////////////////////
        //
        // SERIAL

        //
        int n;
        CString* str;
        // PORTS
        n_portnum = 0;
        for (n=0;n<PORTNAME_MAX;n++)
        {
                str = new CString;
                str->Format("COM%d",n+1);
                if (CSerialMFC::CheckPort((LPCTSTR)(*str))
                        ==CSerialMFC::EPortAvailable)
                {
                        //m_lstStrPort[n] = str;
                        m_lstStrPort[n_portnum] = str;
                        n_portnum ++;
                }
        }

        // BAUDRATE

        //m_lstBaudrate[0] = CSerialMFC::EBaud9600;
        //m_lstBaudrate[1] = CSerialMFC::EBaud19200;
        //m_lstBaudrate[2] = CSerialMFC::EBaud38400;

        m_lstBaudrate[0] = CSerialMFC::EBaud9600;                // 9600 bits/sec
        m_lstBaudrate[1] = CSerialMFC::EBaud19200;                // 19200 bits/sec (default)
        m_lstBaudrate[2] = CSerialMFC::EBaud38400;                // 38400 bits/sec
        m_lstBaudrate[3] = CSerialMFC::EBaud57600;                // 57600 bits/sec
        m_lstBaudrate[4] = CSerialMFC::EBaud115200;                // 115200 bits/sec
        m_lstBaudrate[5] = CSerialMFC::EBaud4800;                // 4800 bits/sec
        m_lstBaudrate[6] = CSerialMFC::EBaud2400;                // 2400 bits/sec
        m_lstBaudrate[7] = CSerialMFC::EBaud1200;                // 1200 bits/sec
        /*
        m_lstBaudrate[8] = CSerialMFC::EBaud19200;                // 19200 bits/sec (default)
        m_lstBaudrate[9] = CSerialMFC::EBaud38400;                // 38400 bits/sec
        m_lstBaudrate[10] = CSerialMFC::EBaud56000;                // 56000 bits/sec
        m_lstBaudrate[11] = CSerialMFC::EBaud57600;                // 57600 bits/sec
        m_lstBaudrate[12] = CSerialMFC::EBaud115200;        // 115200 bits/sec
        m_lstBaudrate[13] = CSerialMFC::EBaud128000;        // 128000 bits/sec
        m_lstBaudrate[14] = CSerialMFC::EBaud256000;        // 256000 bits/sec
        */
        m_lstStrBaudrate[0] = new CString("9600");
        m_lstStrBaudrate[1] = new CString("19200");
        m_lstStrBaudrate[2] = new CString("38400");
        m_lstStrBaudrate[3] = new CString("57600");
        m_lstStrBaudrate[4] = new CString("115200");
        m_lstStrBaudrate[5] = new CString("4800");
        m_lstStrBaudrate[6] = new CString("2400");
        m_lstStrBaudrate[7] = new CString("1200");


        m_lstDataBits[0] = CSerialMFC::EData8;
        m_lstDataBits[1] = CSerialMFC::EData6;
        m_lstDataBits[2] = CSerialMFC::EData7;
        m_lstDataBits[3] = CSerialMFC::EData5;

        m_lstStrDataBits[0] = new CString("8");
        m_lstStrDataBits[1] = new CString("7");
        m_lstStrDataBits[2] = new CString("6");
        m_lstStrDataBits[3] = new CString("5");

        m_lstParity[0] = CSerialMFC::EParNone;
        m_lstParity[1] = CSerialMFC::EParOdd;
        m_lstParity[2] = CSerialMFC::EParEven;
        m_lstParity[3] = CSerialMFC::EParMark;
        m_lstParity[4] = CSerialMFC::EParSpace;


        m_lstStrParity[0] = new CString("None");
        m_lstStrParity[1] = new CString("Odd");
        m_lstStrParity[2] = new CString("Even");
        m_lstStrParity[3] = new CString("Mark");
        m_lstStrParity[4] = new CString("Space");


        m_lstStopBits[0] = CSerialMFC::EStop1;
        m_lstStopBits[1] = CSerialMFC::EStop1_5;
        m_lstStopBits[2] = CSerialMFC::EStop2;

        m_lstStrStopBits[0] = new CString("1");
        m_lstStrStopBits[1] = new CString("1.5");
        m_lstStrStopBits[2] = new CString("2");

        CComboBox* p_ComboBox;
        p_ComboBox =
                (CComboBox*)GetDlgItem(IDC_CBB_PORTNAME);
        for (n=0;n<n_portnum;n++)
                p_ComboBox->AddString((LPCTSTR)(*m_lstStrPort[n]));
        if(n_portnum>0) p_ComboBox->SetCurSel(0);

        p_ComboBox =
                (CComboBox*)GetDlgItem(IDC_CBB_BAUDRATE);
        for (n=0;n<BAUDRATE_MAX;n++)
                p_ComboBox->AddString((LPCTSTR)(*m_lstStrBaudrate[n]));
        p_ComboBox->SetCurSel(0);

        p_ComboBox =
                (CComboBox*)GetDlgItem(IDC_CBB_DATABITS);
        for (n=0;n<DATABITS_MAX;n++)
                p_ComboBox->AddString((LPCTSTR)(*m_lstStrDataBits[n]));
        p_ComboBox->SetCurSel(0);

        p_ComboBox =
                (CComboBox*)GetDlgItem(IDC_CBB_PARITY);
        for (n=0;n<PARITY_MAX;n++)
                p_ComboBox->AddString((LPCTSTR)(*m_lstStrParity[n]));
        p_ComboBox->SetCurSel(0);

        p_ComboBox =
                (CComboBox*)GetDlgItem(IDC_CBB_STOPBITS);
        for (n=0;n<STOPBITS_MAX;n++)
                p_ComboBox->AddString((LPCTSTR)(*m_lstStrStopBits[n]));
        p_ComboBox->SetCurSel(0);

        m_port_opened = false;
        UpdateButtonOC();

        return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}
billtian (2010-1-14 10:28:53)
看书上,串口助手的程序,没找到哪里有释放啊
binglin (2010-1-14 14:25:46)
这个程序应该是在程序关闭时再自动释放这些空间,原因是申请的这些空间在赋值后,在程序运行期是不会再更改了。