cocos2dx中,lua调用C++函数产生空指针问题

//调用lua函数
const char* HclcData::callLuaFunction(const char* luaFileName,const char* functionName)
{
lua_State* ls = CCLuaEngine::defaultEngine()->getLuaStack()->getLuaState();

int isOpen = luaL_dofile(ls, getFileFullPath(luaFileName));
if(isOpen!=0)
{
    CCLOG("Open Lua Error: %i", isOpen);
    return NULL;
}
//要调用的函数应该被压入堆栈
lua_getglobal(ls, functionName);

//把需要传递给这个函数的参数按正序压栈; 这是指第一个参数首先压栈
lua_pushstring(ls, "Himi");
lua_pushnumber(ls, 23);
lua_pushboolean(ls, true);

/*
 最后调用一下lua_call
 第2个参数:函数的参数个数
 第3个参数:函数返回值个数
 */
lua_call(ls, 3, 1);

const char* iResult = lua_tostring(ls, -1);

return iResult;

}

//lua调用C++函数
void HclcData::callCppFunction(const char* luaFileName)
{

lua_State*  ls = CCLuaEngine::defaultEngine()->getLuaStack()->getLuaState();

/*
 Lua调用的C++的函数必须是静态的
 */
 //把 C 函数 cppFunction 设到全局变量 name 中。(将CPP中的函数注册到lua中)
lua_register(ls, "cppFunction", cppFunction);
//加载并运行lua文件
int isOpen = luaL_dofile(ls, getFileFullPath(luaFileName));
if(isOpen!=0)
{
    CCLOG("Open Lua Error: %i", isOpen);
    return;
}

}

int HclcData::cppFunction(lua_State* ls)
{
//从lua栈内取出两个参数
int luaNum = (int)lua_tonumber(ls, 1);
int luaStr = (int)lua_tostring(ls, 2);
CCLOG(“Lua调用cpp函数时传来的两个参数: %i %s”,luaNum,luaStr);

/*
 返给Lua的值
 */
//向lua栈内压入两个参数
lua_pushnumber(ls, 321);
lua_pushstring(ls, "Himi");

/*
 返给Lua值个数
 */
return 2;

}

const char* HclcData::getFileFullPath(const char* fileName){
return CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName).c_str();
}

HclcData::~HclcData(){

CC_SAFE_DELETE(_shared);
_shared=NULL;

}

以上是代码

然后我自己调用下面两句代码
HclcData::sharedHD()->callCppFunction(“Test.lua”);
HclcData::sharedHD()->callLuaFunction(“Test.lua”,“call_Cpp”);

能够输出正确答案:
Cocos2d: Lua调用cpp函数时传来的两个参数: 999 I’m a lua string
从cpp函数中获得两个返回值: 321 Himi

但是输出答案后,程序会产生中断,且程序直接退出(系统没有自动帮你下断点)
之后我自己下断点一步步运行,
static int HclcData::cppFunction(lua_State* ls)
{
//从lua栈内取出两个参数
int luaNum = (int)lua_tonumber(ls, 1);
int luaStr = (int)lua_tostring(ls, 2);
CCLOG(“Lua调用cpp函数时传来的两个参数: %i %s”,luaNum,luaStr);

/*
 返给Lua的值
 */
//向lua栈内压入两个参数
lua_pushnumber(ls, 321);
lua_pushstring(ls, "Himi");

/*
 返给Lua值个数
 */
return 2;

}

在这个函数结束时,系统产生中断且直接退出,看error信息是有空指针。。。。由于本人菜鸟一只,搞了很久也无法解决,特来求教