CString异常导致程序崩溃 求救!在线等待解决在加分

jinxuliang 2004-08-05 10:27:28
程序流程是去读一个动态变化的文本文件,然后去分析文本字符串,插入远程数据库.
程序不定时的报告:程序发生未知错误,请与软件供应商联系.
在vc6中调试:
报告:一个无效的句柄连接(an access unhandle 0x0000005)
并定位到了:
strcore.cpp文件(MFC自带的)的这个函数中:


const CString& CString::operator=(const CString& stringSrc)
{
if (m_pchData != stringSrc.m_pchData)
{
if ((GetData()->nRefs < 0 && GetData() != _afxDataNil) ||
stringSrc.GetData()->nRefs < 0)///////定位到了这一行
{
// actual copy necessary since one of the strings is locked
AssignCopy(stringSrc.GetData()->nDataLength, stringSrc.m_pchData);
}
else
{
// can just copy references around
Release();
ASSERT(stringSrc.GetData() != _afxDataNil);
m_pchData = stringSrc.m_pchData;
InterlockedIncrement(&GetData()->nRefs);
}
}
return *this;
}

请问高人是什么原因造成的???????求大家帮忙了.
...全文
628 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
enoloo 2004-08-06
  • 打赏
  • 举报
回复
建议用日志输出。

程序没有看,是不是可以用文件改变监视? 文件的改变和读取两个过程最好在一个线程中,否则应该考虑文件的锁定和同步。 或者考虑用file mapping.
microyzy 2004-08-06
  • 打赏
  • 举报
回复
比如你可以加一个
#define TEST_FLAG
在定义之后就输出日志,将来解决问题了把标志去掉就可以
类似服务器之类的值守程序,我认为在程序内部最好有自己的一套调试方法,这种程序有些错误确实是短时间内很难发现的
microyzy 2004-08-06
  • 打赏
  • 举报
回复
代码太多了
如果不好调试的话,楼主可以加一个临时日志,日志详细点,这样根据日志,可以大概知道程序在哪里崩溃,知道出错的地方之后,就好办了,按照楼主的描述,我觉得可能只是一个微小的失误造成的
liuyanlin 2004-08-06
  • 打赏
  • 举报
回复
程序太大了,自己慢慢调试,有个诀窍,可以把你认为没有错误的代码先注释掉,
能自己找到错误是最好的,而且最好能自己适应找错,上次找个错误花了3个小时,。。。。
jinxuliang 2004-08-06
  • 打赏
  • 举报
回复
单步调试不现实啊!程序运行有可能10多个小时不出错误,也有可能半个小时就报错.把F10按坏了,也不一定能跟踪得到啊,我现在写日志都还没有找到问题.
lixiaosan 2004-08-06
  • 打赏
  • 举报
回复
单步调试了。。F10
carbon107 2004-08-06
  • 打赏
  • 举报
回复
单步调试,看看给CString类型变量赋值是不是出的问题
carbon107 2004-08-06
  • 打赏
  • 举报
回复
应是你自已程序处理的问题
zhang865 2004-08-06
  • 打赏
  • 举报
回复
程序太长了,建议你单步调试看看是那个CString 变量出的问题 。
jinxuliang 2004-08-06
  • 打赏
  • 举报
回复
我也不知道是那句出的问题.因为我读静态文本的时候没有问题,而且可能没有写完字符的情况我都做了处理.当程序每5秒去读动态生成的文本的时候,就会无规律的报所述错误.请大家指正
jinxuliang 2004-08-06
  • 打赏
  • 举报
回复
如果排他处理不好.他更新的数据就写不进来了.
yeyuboy 2004-08-06
  • 打赏
  • 举报
回复
最好是在访问这个文件时打开方式设置为排他。
syy64 2004-08-06
  • 打赏
  • 举报
回复
以准备在接呀^_^
holyeagle 2004-08-06
  • 打赏
  • 举报
回复
恭喜楼主.
问题可能是由于竞争的问题,这种问题最好用临界保护
jinxuliang 2004-08-06
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3247/3247528.xml?temp=.5959589
如果没有得到分的兄弟请到这里领
syy64 2004-08-06
  • 打赏
  • 举报
回复
很简单呀,调试就知道了,要记住,索引是从0开始呀。
jinxuliang 2004-08-06
  • 打赏
  • 举报
回复
经过我12个小时坚持不懈的跟踪,和对日志的分析.终于找到 了.数组越界.
但是这个越界却产生得很希奇.我用pt_filekj.readstring(s)在某个偶然的情况下能读到两行数据.而导致了数据分析的时候越界.请问大家为什么会产生这种情况呢?这个文本是一个程序在不间断的写,另外一程序个不间断的读.
CString p_sss,p_s1,p_m_str[9];
//分析字符串存入数组
while(p_zc>p_a1)
{

p_sss=s.Right(p_zc-p_a1);
p_s1=p_sss.SpanExcluding(",");
p_m_str[p_kk]=p_s1;

//AfxMessageBox(p_m_str[p_kk]);


p_kk++;
p_a1+=p_s1.GetLength()+1;
}

为了庆祝一下,所以所有的参与者都有分.本帖子共开了200分.
syy64 2004-08-06
  • 打赏
  • 举报
回复
一般是内存紊乱,指针用到了没分配空间的地址,或数组越界。
gflpower 2004-08-06
  • 打赏
  • 举报
回复
程序太长了,
不过我也遇过类似的事如果
字符串为空的时间调用的函数比如 LEFT ()
会出错的

jinxuliang 2004-08-06
  • 打赏
  • 举报
回复
我已经处于崩溃的边缘了.这是我们和第三方的一个接口文本.神啊,救救我吧
加载更多回复(4)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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