凡人道 2016-04-21 09:03 采纳率: 0%
浏览 1533
已结题

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

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

  • 写回答

3条回答

  • oyljerry 2016-04-21 14:05
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?