如何 malloc modbus_t

How to malloc modbus_t

我编写了通用应用程序来处理 JSON 配置文件中定义的尽可能多的 modbus 设备。 mbus_servers struct used in my_modbus_init() contents ip of device and port.

my_modbus_init() 中一个 modbus_t 的初始化如下所示:

modbus_t * my_modbus_init(const char * ip_s, int port, int slave_id)
{
    modbus_t *ctx;


    ctx = modbus_new_tcp(ip_s, port);
    if(ctx == NULL)
    {
      printf("Error");
    }

    modbus_set_debug(ctx, 0);

    if (modbus_connect(ctx) == -1)
    {
        fprintf(stderr, "Connection failed: %s\n",modbus_strerror(errno));
        modbus_free(ctx);
        return NULL;
    }

    modbus_set_slave(ctx, slave_id);

    return ctx;
}

现在我尝试初始化动态分配的数量 modbus_t:

modbus_t * my_modbus;
int quantity_of_connections_modbus = 3;

my_modbus = (modbus_t *) malloc (quantity_of_connections_modbus * sizeof(modbus_t));
                                                                  ^here I get invalid application of ‘sizeof’ to incomplete type ‘modbus_t' (I know that is because i dont have acces to definition of modbus_t [it is defined in modbus.h as typedef struct _modbus modbus_t; ])

for(i=0; i< quantity_of_connections_modbus; i++)
{
  // |> my_modbus[i] = my_modbus_init(mbus_servers[i]->host,mbus_servers[i]->port,MBUS_SLAVE); 
  // |- And here error: dereferencing pointer to incomplete type ‘modbus_t {aka struct _modbus}’ 
}

有什么方法可以使用 malloc 根据需要创建尽可能多的 modbus_t 吗?

不是 modbus_t 对象数组,而是 指向 modbus_t 对象的 指针数组。这是有道理的,因为 my_modbus_init 函数(以及它调用的 modbus_new_tcp 函数)returns 指针。

也就是说把sizeof(modbus_t)改成sizeof(modbus_t *)。并更改变量 my_modbus 来表示这个指针数组(即 modbus_t **)。


相应修改的问题代码:

modbus_t ** my_modbus;
int quantity_of_connections_modbus = 3;

my_modbus = malloc (quantity_of_connections_modbus * sizeof(modbus_t*));

for(i=0; i< quantity_of_connections_modbus; i++)
{
  my_modbus[i] = my_modbus_init(mbus_servers[i]->host,mbus_servers[i]->port,MBUS_SLAVE); 
}