如何 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);
}
我编写了通用应用程序来处理 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);
}