EXC_从函数返回时访问错误

EXC_从函数返回时访问错误,c,exception,exc-bad-access,C,Exception,Exc Bad Access,当从函数返回时,我得到了一个错误的访问权限,调试器没有给我任何信息(它通常指向错误产生的位置,但它没有并显示“未知函数”) 导致错误的函数如下所示: STATUS game_callback_pickup(Game *game, char *param) { char **str_end = &param + 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 = &param + 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时抛出异常的时间也不早。