CString 异常 崩溃 弹错

oN5GrzoN 2012-08-08 05:50:47
有一个CString A,是与界面上的一个combo box 控件绑定的(暂时命名它为CA)

有另一个combo box控件,给它加selchange事件,就是在下拉列表切换的时候,需要对CString A做一些事。

但是,在这里,无论调用A的任何方法,都会崩溃。崩溃弹出

SynBak.exe 中的 0x7866f63c (mfc100ud.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x4efd5a93 时发生访问冲突

中断位置,在CString的文件里是

CStringData* GetData() const throw()
{
return( reinterpret_cast< CStringData* >( m_pszData )-1 );
}
在return那里中断了。

我的代码的位置是

void CSynBakDlg::OnCbnSelchangeOrigin()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR c;
if (cmbOrigin.GetLBText(cmbOrigin.GetCurSel(), &c) > 0)
{
//这里,不管调用strGbg的任何方法,都崩溃
//尝试过strGgb.unlockbuffer,看是不是系统把buffer给锁了,但不行,仍然崩溃。
}

}


...全文
594 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NEW_USERLCP 2014-03-11
  • 打赏
  • 举报
回复
楼主问题解决了么?我也遇到了同样的问题,先声明一个CString类的对象,然后给其赋值char *的字符串

CString A;
char *ch;
/*ch赋值...*/
A = ch;
A.GetBuffer();//调用A的任意函数都会内存异常
gold_water 2012-08-09
  • 打赏
  • 举报
回复
一种简单的做法,再定义个combo box 控件的关联变量,类型为INT,是它的索引,如果没有选择项,值为-1,判断一下很方便;也可以作为GetLBText的第一个参数。
zgl7903 2012-08-09
  • 打赏
  • 举报
回复
用CString型的

int nSel = cmbOrigin.GetCurSel();
if(nSel != CB_ERR)
{
CString c;
if (cmbOrigin.GetLBText(nSel, c) > 0)
{
}
}
IranCyberArmy 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

TCHAR c;
if (cmbOrigin.GetLBText(cmbOrigin.GetCurSel(), &c) > 0)
这两句话错误好多
1.TCHAR就是char,GetLBText第二个参数是CString引用,考虑到转char的时候\0问题,必定内存溢出啊
2.GetLBText返回值是空,大于号怎么判断

内存溢出后,就都乱了
[/Quote]

int GetLBText(
int nIndex,
LPTSTR lpszText
) const;
void GetLBText(
int nIndex,
CString& rString
) const;

我想楼主想用第一个形式
MSDN中说的

lpszText
Points to a buffer that is to receive the string. The buffer must have sufficient space for the string and a terminating null character.
看不见的裂痕 2012-08-08
  • 打赏
  • 举报
回复
TCHAR c;
if (cmbOrigin.GetLBText(cmbOrigin.GetCurSel(), &c) > 0)
这两句话错误好多
1.TCHAR就是char,GetLBText第二个参数是CString引用,考虑到转char的时候\0问题,必定内存溢出啊
2.GetLBText返回值是空,大于号怎么判断

内存溢出后,就都乱了
  • 打赏
  • 举报
回复
内存访问违规了
HuWenjin 2012-08-08
  • 打赏
  • 举报
回复
GetLBText 前没有获取当前LBText的长度

你相当然的只给了一个字节的指针进去

GetLBText写数据时越限,写到不该写的地方,出错了
meiguakee 2012-08-08
  • 打赏
  • 举报
回复
没看懂,cmbOrigin.GetCurSel(), &c)为什么传&c进去呢,如果不传cstring进去,个人觉得应该也是new 一段存放TCHAR的内存然后传进去吧。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧