EXC_从函数返回时访问错误
当从函数返回时,我得到了一个错误的访问权限,调试器没有给我任何信息(它通常指向错误产生的位置,但它没有并显示“未知函数”) 导致错误的函数如下所示:EXC_从函数返回时访问错误,c,exception,exc-bad-access,C,Exception,Exc Bad Access,当从函数返回时,我得到了一个错误的访问权限,调试器没有给我任何信息(它通常指向错误产生的位置,但它没有并显示“未知函数”) 导致错误的函数如下所示: STATUS game_callback_pickup(Game *game, char *param) { char **str_end = ¶m + MAX_PARAM_SIZE; Id objId = (Id) strtol(param, str_end, 0); STATUS status = NO_
STATUS game_callback_pickup(Game *game, char *param) {
char **str_end = ¶m + MAX_PARAM_SIZE;
Id objId = (Id) strtol(param, str_end, 0);
STATUS status = NO_STATUS;
Object *object;
if (objId == NO_ID) {
status = ERROR;
return status;
}
if (player_pickup_object(game->player, objId) == ERROR) {
status = ERROR;
return status;
}
object = game_get_object_by_id(game, objId);
if (!object) {
status = ERROR;
return status;
}
if (object_set_location(object, NO_ID) == ERROR) {
status = ERROR;
return status;
}
status = OK;
return status;
}
在“返回”发生时抛出错误。我已经尝试了很多东西,但似乎没有任何帮助,老实说,如果没有更多的调试器帮助,我不知道如何调试这个错误
你知道这里会发生什么吗?这里最突出的一点是如何使用
strtol
的结束指针:你不需要创建指向char的指针并传递它,但是你应该定义指向char的指针并传递它的地址,这样strtol
就可以填充信息。如果您不使用end进行任何进一步的检查,那么只需传递NULL
char**str_end=¶m+MAX_param_SIZE;Id objId=(Id)strtol(参数,str_end,0)代码>-->char*str\u end=NULL;Id objId=(Id)strtol(参数和str_end,0)代码>作为旁白:不需要局部变量status
;从函数返回后,它将丢失。而不是status=ERROR;返回状态
您可以只写返回错误
无论以后如何处理,这实际上都会导致问题:char**str_end=¶m+MAX_param_SIZE
。既然您没有使用str_end,您可以删除它,并将NULL传递给strtol()
@MOehm,谢谢!这修复了它,我不知道为什么在返回时抛出异常,而在使用strtol时抛出异常的时间也不早。