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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!