求教C++方面的问题,谢谢
用VS2010编程时,程序成功编译,但不能运行出结果,一运行就出现一对话框内容大致如下:0x7c80a378指令引用的0x0caa326e内存。该内容不能为read想问下...
用VS2010编程时,程序成功编译,但不能运行出结果,一运行就出现一对话框内容大致如下:
0x7c80a378指令引用的 0x0caa326e内存。该内容不能为 read
想问下原因何在,谢谢
代码的长度超过了字数,无法贴上,如要代码可给个邮箱,我传给你们看看,谢谢 展开
0x7c80a378指令引用的 0x0caa326e内存。该内容不能为 read
想问下原因何在,谢谢
代码的长度超过了字数,无法贴上,如要代码可给个邮箱,我传给你们看看,谢谢 展开
展开全部
修电脑时,经常碰到这类问题。
先下:【read修复工具】,修复一下,试试!
这是你下载的“游戏或软件”与电脑“内存”有冲突
1。游戏或软件带木马或病毒!(杀毒软件,全盘扫描与自定义扫描,重启后,隔离区,彻底删除)
2。游戏或软件与其它游戏有冲突!(同类软件,互不兼容!开始菜单,程序,卸载,只留一个游戏)
3。游戏或软件与其它软件冲突!(如:冲突播放器或某些杀毒软件过于敏感,卸载播放器或杀毒,重装游戏)
4。游戏或软件版本电脑显卡不支持!(下载:驱动人生或驱动精灵,更新显卡驱动)
5。游戏或软件缺少必要的dll文件或游戏补丁!(dll文件,360系统急救箱,dll文件恢复,添加恢复!游戏补丁建议去:官网下载!)
6。游戏或软件带恶评插件!(可以用360安全卫士或金山卫士,或可牛免费杀毒,扫描插件,立即清理)
7。游戏或软件版本,不适合当前系统运行!(开启“兼容模式”或更换游戏版本试试,建议去下载:正规官网游戏!)
8。游戏或软件有bug或错误或带可疑启动木马!(试试:360系统急救箱,系统修复,全选,立即修复!网络修复,开始修复!
再点:开始急救!重启后,点开“文件恢复区”,全选,彻底删除文件)!
9。再不行,开始菜单,运行 ,输入cmd, 回车,在命令提示符下输入(复制即可) :
for %1 in (%windir%\system32\*.ocx) do regsvr32 /s %1
粘贴,回车,再输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
回车!直到屏幕滚动停止为止,重启电脑!
10。实在不行,还原系统
以上的都试过,问题如果依旧,那么就是硬件的问题了,请用排除法确定某一硬件出问题,及时维修及更换
请采纳, 谢谢!
先下:【read修复工具】,修复一下,试试!
这是你下载的“游戏或软件”与电脑“内存”有冲突
1。游戏或软件带木马或病毒!(杀毒软件,全盘扫描与自定义扫描,重启后,隔离区,彻底删除)
2。游戏或软件与其它游戏有冲突!(同类软件,互不兼容!开始菜单,程序,卸载,只留一个游戏)
3。游戏或软件与其它软件冲突!(如:冲突播放器或某些杀毒软件过于敏感,卸载播放器或杀毒,重装游戏)
4。游戏或软件版本电脑显卡不支持!(下载:驱动人生或驱动精灵,更新显卡驱动)
5。游戏或软件缺少必要的dll文件或游戏补丁!(dll文件,360系统急救箱,dll文件恢复,添加恢复!游戏补丁建议去:官网下载!)
6。游戏或软件带恶评插件!(可以用360安全卫士或金山卫士,或可牛免费杀毒,扫描插件,立即清理)
7。游戏或软件版本,不适合当前系统运行!(开启“兼容模式”或更换游戏版本试试,建议去下载:正规官网游戏!)
8。游戏或软件有bug或错误或带可疑启动木马!(试试:360系统急救箱,系统修复,全选,立即修复!网络修复,开始修复!
再点:开始急救!重启后,点开“文件恢复区”,全选,彻底删除文件)!
9。再不行,开始菜单,运行 ,输入cmd, 回车,在命令提示符下输入(复制即可) :
for %1 in (%windir%\system32\*.ocx) do regsvr32 /s %1
粘贴,回车,再输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
回车!直到屏幕滚动停止为止,重启电脑!
10。实在不行,还原系统
以上的都试过,问题如果依旧,那么就是硬件的问题了,请用排除法确定某一硬件出问题,及时维修及更换
请采纳, 谢谢!
展开全部
一般都是数据越界造成的,例如定义了int a[100];但你有访问a[100]=0;的时候
定义a[100]后下标是从0-99的,这种会越界,有时候越界也没事,有时候就不行,主要是内存分配不同造成的
还有链表存储访问的情况,当链表没有初始化或者已经销毁的,去访问就会出问题
其他的情况也有,但都是程序中数据应用的逻辑问题,要限制好
建议你用调试方法试验程序,设置几个节点,用F5看在哪个节点位置出问题,然后下次到这个节点后用F10一步一步运行,看为什么出问题
sxt19840210
定义a[100]后下标是从0-99的,这种会越界,有时候越界也没事,有时候就不行,主要是内存分配不同造成的
还有链表存储访问的情况,当链表没有初始化或者已经销毁的,去访问就会出问题
其他的情况也有,但都是程序中数据应用的逻辑问题,要限制好
建议你用调试方法试验程序,设置几个节点,用F5看在哪个节点位置出问题,然后下次到这个节点后用F10一步一步运行,看为什么出问题
sxt19840210
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
工程不能打开。。。
自己新建了个工程看了下,你是什么问题也没说,不过看样子你是一运行就报错吧?
COM里的VARIANT是不能直接转成Cstring的,你那样子赋值应该会出exception的,反正我这是过不了。
先定义个转换函数,在对话框头文件里声明
CString VariantToString(VARIANT var);
cpp里实现
CString CFiberDlg::VariantToString(VARIANT var)
{
CString strValue;
_variant_t var_t;
_bstr_t bstr_t;
time_t cur_time;
CTime time_value;
COleCurrency var_currency;
switch(var.vt)
{
case VT_EMPTY:
case VT_NULL:strValue=_T("");break;
case VT_UI1:strValue.Format(L"%d",var.bVal);break;
case VT_I2:strValue.Format(L"%d",var.iVal);break;
case VT_I4:strValue.Format(L"%d",var.lVal);break;
case VT_R4:strValue.Format(L"%f",var.fltVal);break;
case VT_R8:strValue.Format(L"%f",var.dblVal);break;
case VT_CY:
var_currency=var;
strValue=var_currency.Format(0);break;
case VT_BSTR:
var_t =var;
bstr_t=var_t;
strValue.Format(L"%s",(const char *)bstr_t);break;
case VT_DATE:
cur_time=var.date;
time_value=cur_time;
strValue.Format(L"%A,%B,%d,%Y");break;
case VT_BOOL:strValue.Format(L"%d",var.boolVal);break;
default:strValue=_T("");break;
}
return strValue;
}
再把
m_strDistance = m_pSet->GetCollect("XScale").bstrVal;//读Name字段
m_strTempDataLen = m_pSet->GetCollect("TempDataLen").bstrVal;//读Suffix字段
这两句改为
_variant_t Var = m_pSet->GetCollect("XScale");//读Name字段
m_strDistance = VariantToString(Var);
Var = m_pSet->GetCollect("TempDataLen");//读Suffix字段
m_strTempDataLen = VariantToString(Var);
试试。
这样改后你的这四个查询方法都能用,运行一切正常。不知道还有其它什么问题,
顺便说下我没导入你的对话框,没弄显示控件,结果都是在debug里看的
自己新建了个工程看了下,你是什么问题也没说,不过看样子你是一运行就报错吧?
COM里的VARIANT是不能直接转成Cstring的,你那样子赋值应该会出exception的,反正我这是过不了。
先定义个转换函数,在对话框头文件里声明
CString VariantToString(VARIANT var);
cpp里实现
CString CFiberDlg::VariantToString(VARIANT var)
{
CString strValue;
_variant_t var_t;
_bstr_t bstr_t;
time_t cur_time;
CTime time_value;
COleCurrency var_currency;
switch(var.vt)
{
case VT_EMPTY:
case VT_NULL:strValue=_T("");break;
case VT_UI1:strValue.Format(L"%d",var.bVal);break;
case VT_I2:strValue.Format(L"%d",var.iVal);break;
case VT_I4:strValue.Format(L"%d",var.lVal);break;
case VT_R4:strValue.Format(L"%f",var.fltVal);break;
case VT_R8:strValue.Format(L"%f",var.dblVal);break;
case VT_CY:
var_currency=var;
strValue=var_currency.Format(0);break;
case VT_BSTR:
var_t =var;
bstr_t=var_t;
strValue.Format(L"%s",(const char *)bstr_t);break;
case VT_DATE:
cur_time=var.date;
time_value=cur_time;
strValue.Format(L"%A,%B,%d,%Y");break;
case VT_BOOL:strValue.Format(L"%d",var.boolVal);break;
default:strValue=_T("");break;
}
return strValue;
}
再把
m_strDistance = m_pSet->GetCollect("XScale").bstrVal;//读Name字段
m_strTempDataLen = m_pSet->GetCollect("TempDataLen").bstrVal;//读Suffix字段
这两句改为
_variant_t Var = m_pSet->GetCollect("XScale");//读Name字段
m_strDistance = VariantToString(Var);
Var = m_pSet->GetCollect("TempDataLen");//读Suffix字段
m_strTempDataLen = VariantToString(Var);
试试。
这样改后你的这四个查询方法都能用,运行一切正常。不知道还有其它什么问题,
顺便说下我没导入你的对话框,没弄显示控件,结果都是在debug里看的
追问
非常感谢,还是不行的,会出现问题 error C2664: “voiATL::CStringT::Format(const char *,...)”: 不能将参数 1 从“const wchar_t [3]”转换为“const char *”
with [ BaseType=char,
StringTraits=StrTraitMFC_DLL
]
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
追答
这个问题是因为你的工程没使用unicode字符集。
可以在工程属性设置里面改成用unicode,以visual studio为例,右击工程,选则properties(属性),把General里的Character Set改成Use Unicode Character Set。
但这样改动后可能会影响到工程里其它字符串使用的地方,还有一种方法就是不实用宏L和_T(),
就是把上述函数中L"xxxx"和_T("xxxx")的L和_T()去掉,直接"xxxx"就可以了。
改了设置后如果编译时遇到文件不能写入问题就把工程clean一次再build
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有代码,无法判断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
检查你的代码,能编译只能说明语法正确,但你的程序逻辑出错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内存非法操作了,只有仔细检查代码的逻辑了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询