2 c471961491 c471961491 于 2016.04.21 17:03 提问

急急急 0xC0000005: 读取位置 0x003741ec 时发生访问冲突 10C

void CppToLua::recvData_lua(int iCmdType, VOID * pData, WORD wDataSize)
{
CCLuaStack* luaStack = CCLuaEngine::defaultEngine()->getLuaStack();
if (!luaStack) return;
lua_State* L = luaStack->getLuaState();
if (!L) return;

//const int status = luaL_dofile(L, "src/manager/CCToLuaManager.lua");
//if(status)
    //printf("Couldn't execute LUA code: %s\n", lua_tostring(L, -1));

void *p = lua_newuserdata(L, wDataSize); //不知道会不会内存泄露...
//memcpy(p, &data, sizeof(data));
memcpy(p, pData, wDataSize);
printf("p:%x, typeid:%d", p, wDataSize);
lua_getglobal(L, "recvData_cctl"); //调用lua函数
lua_pushnumber(L, iCmdType); //type
lua_pushlightuserdata(L, p); //buffer
lua_pushnumber(L, wDataSize); //size
//lua_call(L, 3, 0);
int ret = lua_pcall(L, 3, 0, 0);
if (ret)
{ 
    printf("Error: %s\n", lua_tostring(L,-1));  
}

//lua_close(L);
//getchar();
return ; 
}
一直在执行到pcall这句,并没有执行完pcall时候发生标题错误。

recvData_cctl这个方法中执行的是 function UITable:moveYAction()

--开局发牌动作
function UITable:moveYAction()
self.m_bInAction = true

self.iTempCountMax = self.cardsMax - self.landownerCards
self.iTempCurCount = 1      --当前已发牌的数量
self.iTempMyCount  = 1      --当前主桌玩家手牌数   

local cards = {}
for i=1, self.iTempCountMax do
    local cardImgBase = self:createOneHandCard(CARD_ORGPOS_DF.baseCard)
    cardImgBase:setPosition(self.posDeal)
    self.m_pTableUI:addNode(cardImgBase)
    cards[i] = cardImgBase
end

print("运行定时器------111--------")
self:scheduleUpdateWithPriorityLua(function() self:arrangeCardSchedule(cards) end, 0.1)
print("运行定时器------222--------")

end

--发牌定时器
--cards[table]:背面牌组
function UITable:arrangeCardSchedule(cards)
-- print("进入定时器 ************")
if self.iTempCurCount > self.iTempCountMax then
self:arrangeCardScheduleFinish()
return
end

-- if self.iTempCurCount == self.iTempCountMax then
--  cardImgBase:removeFromParentAndCleanup(true)
-- end

-- local dealCard = self:createOneHandCard(CARD_ORGPOS_DF.baseCard)
-- dealCard:setPosition(self.posDeal)
-- self.m_pTableUI:addNode(dealCard)

local card = cards[self.iTempCurCount]

local ret = (self.iTempCurCount+1)%3
if ret == 0 then
    --主位
    self:arrangeCardAction(card, self.posDealCenter, true)
elseif ret == 1 then
    --左边位置
    self:arrangeCardAction(card, self.posDealLeft, false)
elseif ret == 2 then
    --右边位置
    self:arrangeCardAction(card, self.posDealRight, false)
end

self.iTempCurCount = self.iTempCurCount + 1
if self.iTempCurCount > self.iTempCountMax then
    self:arrangeCardScheduleFinish()
end

end

--发牌动作
--pos[userdate]:发牌的目标点
--needMoveX[bool]:是否需要重排手牌显示
function UITable:arrangeCardAction(card, pos, needMoveX)
local function cardRemove()
card:removeFromParentAndCleanup(true)
end

local function receiveHandCard()
    -- print("加入手牌 ========== ", cards[self.iTempMyCount])
    self:receiveOneCardAction(gd.landowner.handCards[self.iTempMyCount])
    self.iTempMyCount = self.iTempMyCount + 1
end

if card then
    local array = CCArray:create()
    array:addObject( CCMoveTo:create(self.dealCardActionTime, pos) )
    array:addObject( CCCallFunc:create(cardRemove) )
    if needMoveX then
        array:addObject( CCCallFunc:create(receiveHandCard) )
    end
    local action = CCSequence:create(array)

    card:runAction(action)
end

end

--17张常规发牌结束
function UITable:arrangeCardScheduleFinish()
self:unscheduleUpdate()
m_pTableNotice.startCallScore()
end

4个回答

CSDNXIAON
CSDNXIAON   2016.04.21 17:12

0xC0000005: 读取位置 0x00000028 时发生访问冲突
0xC0000005: 读取位置 0x01900014 时发生访问冲突
0xC0000005: 读取位置 0x00000001 时发生访问冲突
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

oyljerry
oyljerry   Ds   Rxr 2016.04.21 22:05

指针异常了 直接编译器中断查看具体出错的函数位置

q610098308
q610098308   2016.04.22 09:28

指针异常,可能被回收或重新赋值,所以指向了不可读的位置。

qq423399099
qq423399099   Ds   Rxr 2016.04.22 13:55

指针的问题
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
0xC0000005: 读取位置 0x00000001 时发生访问冲突
刚刚遇到了这个错误:0xC0000005: 读取位置 0x00000001 时发生访问冲突。 找了好久,还是没发现代码出错~~~~折腾了30min, 错误原来是这样造成的。 报错信息如下: 之前就遇到这样的错误,但是刚刚忘记了解决方案。下面是调试时,栈的信息: 原因: 空指针(野指针) 分析: 使用了没有定义的指针,致使内存访问出错~~~~ 这里笔者的犯错是: 把两行代码
MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
这个bug困扰我两天了,我在win7下开发的MFC程序,在win7下一只运行良好,放到同事的win10机子上就出问题了,在点击一个按钮弹出子窗口时必崩,在win7下仔细调试,发现:调用DoModal()后 ,会输出“ 0xC0000005: 读取位置 0x00000020 时发生访问冲突 ” 但是程序没有崩溃。 待续...
0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突 异常处理问题解决办法
典型的空指针错误, 一点要先判断该指针是否为空才操纵。
0xC0000005: 读取位置 0x00000000 时发生访问冲突
遇见这种问题一般都是空指针,即:指针里没有赋值~ 如果你对null 进行操作就会产生空指针异常 Object obj = new Object(); 你要知道 obj是一个Object指针变量,指向Object类的一个实例 我们说obj是一个对象 实质是它指向一个对象的首地址 如果这个指针变量obj 没有指向任何空间 你调用它的方法和属性就会出错 例如 Object obj =
0xC0000005: 读取位置 0xFEEEFEEE 时发生访问冲突
0xC0000005:  读取位置 0xFEEEFEEE 时发生访问冲突。说明指针所指向的空间已经被释放
vs2013右键菜单 0xC0000005: 读取位置 0x00000004 时发生访问冲突
 0x10164A91 (mfc120ud.dll) (Menu.exe 中)处的第一机会异常:  0xC0000005:  读取位置 0x00000004 时发生访问冲突。 0x10164A91 (mfc120ud.dll) (Menu.exe 中)处有未经处理的异常:  0xC0000005:  读取位置 0x00000004 时发生访问冲突。
BUG解析之0xC0000005: 读取位置 0x00000000 时发生访问冲突。
错误内容如下:
没有躲过的坑--0xC0000005: 读取位置 xxx时发生访问冲突
Bjarne Stroustrup老爷子说过: “C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.” 最近的工程时不时的出现0xC0000005: 读取位置 xxx时发生访问冲突,导致崩溃。先看看下面的程序:#includ
0x00007FF7C49A4C42 处有未经处理的异常:0xC0000005: 读取位置 0x000001481A2D86C4 时发生访问冲突
这个问题我最近遇到过几次,主要是在做特征点检测,或者有用到有数组或者向量的情况下,有可能会出现这种情况,可能出现这种问题的情况有很多,我现在说一下我发现的问题: 这几次出现这种问题基本都是溢出问题,比如一个向量他的大小为500,而你在访问的时候却访问了他的第501个元素,就会出现这种问题,但是这种问题比较难发现,因为程序写的没有问题,但是就是会蹦出来这种问题呀,我当时是一个一个去试,由于程序比较大
由ShowWindow函数产生的“XX处未处理的异常:0xC0000005:读取位置0x00000020时发生访问冲突”
在调试mfc程序的过程中,经常遇到这种异常。刚开始不知道怎么去处理,后来遇到的次数多了,发现这种问题在一般情况下,很容易找到原因。