0

我在我的 C 程序中传递了大量的指针,我需要帮助来确定我是否做得对。

我声明了一个指向数组结构的指针(包含 3 个字段,1,相关的一个,是一个整数):

StatusItem* statusItem = NULL;

将指向数组指针的指针传递给函数:

parse_object(..., &statusItem, ...)

它被读入函数:

parse_object(..., StatusItem** statusItem, ...)

内存分配:

*statusItem = malloc(cJSON_GetArraySize(*items) * sizeof(StatusItem));

它的一个组件(其中一个索引的整数字段)被传递给另一个函数:

parseInt((*optional)->valuestring, &statusItem[i]->optional)

这是函数,这是我遇到错误的地方。不知何故,我没有正确传递对数组索引的引用:

bool parseInt(char *num, int *result)
{
    char *end;

    int val = strtol(num, &end, 10);
    if(errno == ERANGE || *end != '\0')  // checks that given value was a number
    {
        return false;
    }
    *result = val;
    return true;
}

我知道这真的很令人困惑,但我认为我无能为力。请在需要时要求澄清。

4

1 回答 1

1

您需要将要设置的字段的地址传递给parseInt,从我们可以看到,StatusItem*传递给的地址parse_object以及分配的地址

*statusItem = malloc(cJSON_GetArraySize(*items) * sizeof(StatusItem));

可能是

&(*statusItem)[i].optional

(*statusItem)为您提供指向已分配内存的指针,然后索引访问(*statusItem)[i]i分配StatusItem对象的第 - 个,然后optional在最终获取该地址之前选择其字段。

于 2013-06-05T13:19:53.577 回答