c - 传递指针到指针的问题

标签 c function pointers

我在 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;
}

我知道这确实令人困惑,但我认为我无能为力。如有需要,请要求澄清。

最佳答案

需要将要设置的字段地址传递给parseInt,从我们可以看到,传递给的是一个StatusItem*的地址parse_object,分配情况为

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

可能是

&(*statusItem)[i].optional

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

关于c - 传递指针到指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940306/

相关文章:

c - *** 检测到 glibc *** sendip : free(): invalid next size (normal): 0x09da25e8 ***

c - 在 32 位处理器 (ARM Cortex A9) 中使用 64 位数据的问题

c - C 中的动态数组

pointers - 返回文字与指针

c - 如何使用 Win32 API 来像控制台一样使用 RichEdit 控件?

c++ - 用 vector 调用函数

function - Haskell:带有函数参数的箭头优先级

javascript - 类型错误:数字不是函数

C++ 指针用于持久对象

c++ - std::unique_ptr::get 有什么意义