0

C プログラムで非常に多くのポインターを渡していますが、それが正しいかどうかを判断するために助けが必要です。

配列構造へのポインターを宣言します (3 つのフィールドを含み、関連するフィールド 1 は整数です)。

StatusItem* statusItem = NULL;

配列のポインターへのポインターを関数に渡します。

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

関数に読み込まれます。

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

メモリが割り当てられます:

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

そのコンポーネント (インデックスの 1 つの整数フィールド) は、別の関数に渡されます。

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

You need to pass the address of the field to be set to parseInt, from what we can see, the address of a StatusItem* being passed to parse_object, and the allocation being

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

it will probably be

&(*statusItem)[i].optional

The (*statusItem) gives you the pointer to the allocated memory, the indexing (*statusItem)[i] then accesses the i-th of the allocated StatusItem objects, and then its optional field is selected before finally the address of that is taken.

于 2013-06-05T13:19:53.577 に答える