在我的程序中,我发现我的这段代码:memcpy(me->m_pLastPacket->m_data,data,sizeof(data));一开始运行是正常的,但运行过几个小时后,这段代码就会出现如下的错误信息:Unhanced Exception at 0x3af9sc in myFTP.exe:0X000000005:写入位置“0X8080808084”时发生访问冲突。其中,m_data和data都是长度为521B的BYTE类型数组。

解决方案 »

  1.   

    你的me->m_pLastPacket->m_data指向变没有?是不是指向超出限制了?
      

  2.   

    多半是内存越界了,DEBUG调试运行,出错时跟踪看在哪里错误,仔细检查使用指针的代码。
      

  3.   

    me->m_pLastPacket->m_data 错误地指向了0X8080808084
      

  4.   

    再进一步补充下我的问题:在我的程序中,是有这样的一个机制:两个线程,一个读,一个写,共享一个环形链表,一个线程使用m_pLastPacket指针向链表写数据,一个使用m_pCurrentPacket指针负责向链表读数据
    环形链表没有用锁,但使用了一个计数器和指针重叠判断来保证这两个线程不会同时处理同一个链表节点,以防出现读写冲突。写数据是采用覆盖的方式,而不是删除或插入。只有退出程序时才会释放m_pLastPacket指针。以下这段代码:memcpy(me->m_pLastPacket->m_data,data,sizeof(data));一开始运行是正常的,但运行过几个小时后(不定时间),这段代码就会出现如下的错误信息:Unhanced Exception at 0x3af9sc in myFTP.exe:0X000000005:写入位置“0X8080808084”时发生访问冲突。其中,m_data和data都是长度为521B的BYTE类型数组,而两个线程间共享的链表长度为10个Packet(Packet是我自定义的结构体,处理的基本单位就是Packet)
    请问大家有什么建议?
      

  5.   

    再次补充:当程序抛出内存访问冲突异常时,我发现这两个线程共享的环形链表结构发生了改变,每个节点的next指针都指向了错误的值(与正常运行时通过断点看到的值不一样,大都指向了0x808080**的某个地址)。求问有没有哪位高手知道是哪里出了问题?
      

  6.   

    每一次读写m_data的前后都打印日志,看一下操作前后m_data指针的变化个人感觉但使用了一个计数器和指针重叠判断来保证这两个线程不会同时处理同一个链表节点,以防出现读写冲突。 这里容易出问题
      

  7.   

    编译,没出问题,运行出问题:console.exe 中的 0x004115b7 处未处理的异常: 0xC0000005: 写入位置 0x00417818 时发生访问冲突