一、编写聊天室程序时遇到的问题:
debug assertion failed arccore.cpp line 478 错误的解决:
先通过以下方法定位:
首先如果你用的是vc6的话:
1。按F5运行你的程序
2。在出错时,选择“重试”
(3。按ALT+7调出“调用栈”窗口
4。双击从上往下的最近一个自己定义的函数,)
一般系统会自动把该函数所在的文件显示出来,此时程序就暂停在光标处。一般来说错误就出在这附近。
你可以通过查看变量的值来确认。
我所遇到的错误为:
析构CSessionSocket对象时,先把CSocketFile指针删除了,然后才销毁CArchive对象,语句如下:
CSessionSocket::~CSessionSocket()
{
m_pDlg=NULL;
if(m_pFile!=NULL)
delete m_pFile;
if(m_pArchiveIn!=NULL)
delete m_pArchiveIn;
if(m_pArchiveOut!=NULL)
delete m_pArchiveOut;
}
此时就会弹出debug assertion failed arccore.cpp错误,原因是执行Archive中的Flush()函数时文件指
针已经为空了。所以就弹出了如上错误。解决办法,将如上指针销毁的顺序改变一下,先销毁CArchive对
象指针,再销毁文件指针。即:
CSessionSocket::~CSessionSocket()
{
m_pDlg=NULL;
if(m_pArchiveIn!=NULL)
delete m_pArchiveIn;
if(m_pArchiveOut!=NULL)
delete m_pArchiveOut;
if(m_pFile!=NULL)
delete m_pFile;
}
二、有关UpdateData()函数的用法总结:
UpdateData(TRUE);
把控件的值传给对应的变量。
UpdateData(FALSE);
把变量的值传递给控件。
下文转自他人博客:
UpdateData()用法 收藏
一、总结UpdateData()函数
UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控
件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了
什么,就应该在访问变量前调用UpdateData(TRUE)。
二、关于编辑框的赋值和取值
向编辑框中赋值和取值时:
1、建一个 控制型的变量,如m_edit1,用CWnd的SetWindowText() 和GetWindowText()来赋值和取值。
m_Edit1.SetWindowText("Hello");
或者GetDlgItem(IDC_EDIT1)->SetWindowText(str);
2、建立一个控制型的变量,如m_edit1,用SetDlgItemText()和GetDlgItemText()来赋值和取值
CString Str="Hello":
m_edit1.SetDlgItemText(IDC_EDIT1,str);
2、直接建一个 数值形的变量 如m_strEdit; 用 UpdateData()来控制得到变量,还是更新变量
。
//取值
UpdateData(TRUE);
CString buf = m_Edit1;
//赋值
m_Edit1="ok!";
UpdateData(FALSE);