今天遇到个问题一直想不明白:
  如果对一个类声明两个对象之后,程序就崩溃,代码如下:
  CFlagColorDlg page6(IDS_TRADEID);//
  sheet.AddPage(&page6);  if (GetIniCtrl()->HasCargoId())
  { 
  CFlagColorDlg page7(IDS_CARGOID);//
  sheet.AddPage(&page7);
  }
         sheet.DoModal();
  如果声明一个,new一个就没有问题,代码如下:
   CFlagColorDlg page6(IDS_TRADEID);//
  sheet.AddPage(&page6);
         CFlagColorDlg *page7;
if (GetIniCtrl()->HasCargoId())

    page7 = new CFlagColorDlg(IDS_CARGOID);//
    sheet.AddPage(page7);
}
         sheet.DoModal();
delete page7;   请高手指点这是怎么回事呢?按照这样的话,如果用两个new也应该没问题。

解决方案 »

  1.   

    估计是CFlagColorDlg 中有什么全局的对象
    你看看
      

  2.   

    要是那样的话
    把它改成成员的指针
    用的时候new出来
      

  3.   

    CFlagColorDlg page6(IDS_TRADEID);// 
    sheet.AddPage(&page6); 
    CFlagColorDlg page7(IDS_CARGOID);// 
    if (GetIniCtrl()->HasCargoId()) 

    sheet.AddPage(&page7); 
    } 具体crash到哪里呢,就怕第二个是{}里面的局部变量。写在外面试试。
      

  4.   

    没有全局变量啊
    class CFlagColorDlg : public CPropertyPage
    {
    DECLARE_DYNCREATE(CFlagColorDlg)// Construction
    public:
    CFlagColorDlg();
    ~CFlagColorDlg();
    CFlagColorDlg(UINT nCaption);// Dialog Data
    //{{AFX_DATA(CFlagColorDlg)
    enum { IDD = IDD_FLAG_COLOR };
    CRecordList m_lstFlagColor;
    //}}AFX_DATA
    // Overrides
    // ClassWizard generate virtual function overrides
    //{{AFX_VIRTUAL(CFlagColorDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL
    private:
    UINT m_nTyp ;
    CString m_strFlagEng;
    void InitList();
    // Implementation
    protected:
    // Generated message map functions
    //{{AFX_MSG(CFlagColorDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnDblclkFlagColor(NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()};
      

  5.   

    应该是3楼所说的,page7是局部变量,出了{}就出生命期了
      

  6.   

    不是局部的问题,我前面的代码是正确的:
    if (GetIniCtrl()->HasConsignerCod())
    {
    CShipperColorPage page5(_T("CONSIGNER"),IDD_CONSIGN_COLOR);
    sheet.AddPage(&page5);
    }
      

  7.   

        代码很简答就是CPropertySheet sheet;然后sheet.AddPage(&page1);一共有page7,主要问题是最后两个是基于同一个对话框类的对象。