debug堆已损坏
大一暑假学校的一个小作业,要求是用刚学的MFC CFile类做一个登录框,在实现注册功能对文本进行读写的时候报了错 搞了半天没能解决
贴代码
void CRegister::OnBnClickedBtnRegisterConfirm()
{
UpdateData(TRUE); //得到编辑框的值
//字符串的转换
USES_CONVERSION; //提前声明宏
//将编辑框值进行拷贝
CUser reg_info;
strcpy_s(reg_info.name, sizeof(reg_info.name), T2A(m_edt_ReUsername));
strcpy_s(reg_info.pwd, sizeof(reg_info.pwd), T2A(m_edt_RePassword));
int nFlag = 0; //为0时注册成功,非0时注册失败,其中为1时用户名重复,为2时两次密码输入不一致
//读用户信息文本
CFile file;
//CUser* userinfo = new CUser; //创建对象指针便于文件读出
file.Open(_T("Usersinfo.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::shareExclusive);
int i = 0; //索引变量
int nSize = file.GetLength(); //文件大小
while (file.GetPosition() <= nSize && nFlag == 0) //判断文件指针的位置是否到文件末尾 且 文件尚未重名
{
//读出信息
file.Read(&userinfo[i], sizeof(CUser));
file.Seek(sizeof(CUser)*(i+1), CFile::begin); //移动文件指针位置
//信息处理
if (strcmp(reg_info.name, userinfo[i].name) == 0) //判断注册用户名是否重名
{
nFlag = 1; //文件重名标识符
}
i++;
}
//判断两次密码输入是否不一致
if (reg_info.pwd != m_edt_PswdConfirm)
{
if (nFlag == 1) //判断用户名是否重复
{
nFlag = 3;
}
else
{
nFlag = 2;
}
}
switch (nFlag)
{
case 0: //注册成功,写入信息
file.SeekToEnd();//将文件指针移动至文件末尾
file.Write(®_info, sizeof(CUser)); //写入新用户
MessageBox(_T("注册成功!"));
break;
case 1: //用户名重复
MessageBox(_T("错误信息1:\n\t用户名重复!"));
break;
case 2: //两次输入密码不一致
MessageBox(_T("错误信息2:\n\t两次密码输入不一致!"));
break;
case 3: //两次密码输入不一致且用户名重复
MessageBox(_T("错误信息3:\n\t用户名重复!\n\t两次密码输入不一致!"));
break;
default: //其他
MessageBox(_T("未知错误!"));
}
//关闭文件
file.Close();
}
debug在messagebox之后会出现堆已损坏的errorr,好像是越界了但不知道怎么修改