0

C99 海合会

我不断收到此错误。我在 main 外面有一个结构。在 main 内部,我尝试使用 calloc 在堆栈上进行分配。我似乎无法找出问题所在。

感谢您的任何建议,

错误:')' 标记之前的预期表达式

/* global */
struct port_data_t                                                                      
{                                                                                       
    size_t task_id;                                                                     
    pthread_t *thread_id;                                                               
    size_t start_port;                                                                  
    size_t number_ports;                                                                
} *port_data;                                                                           


/* main function */
struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));
4

5 回答 5

9

应该是calloc(4, sizeof(*port_data)):注意 *在e var 名称之前。

于 2009-03-09T05:48:03.293 回答
4

应该是 sizeof(port_data_t) 而不是 sizeof(port_data*)。前者是 port_data_t 结构的大小。后者没有任何意义。

于 2009-03-09T05:47:20.250 回答
1

尝试改变这个:

struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));

对此:

port_data = (struct port_data_t*) calloc(4, sizeof(*port_data));

可能会好一点。如果您已声明port_data为全局结构,则无需将其重新声明为struct port_data_t. GCC 应该已经知道了。当然,我会怎么做是这样的:

port_data = (struct port_data_t*) calloc(4, sizeof(struct port_data_t));

但我不喜欢将变量放入sizeof(). 我试着坚持把类型放在那里,只是出于习惯。此外,它还解决了关于指针究竟需要如何被取消引用的任何歧义,这在这种情况下会让您感到困惑。

于 2009-03-09T05:51:56.607 回答
1
#include <malloc.h>
#include <pthread.h>

typedef struct port_data_t {
    size_t task_id;
    pthread_t *thread_id;
    size_t start_port;
    size_t number_ports;
} port_data_t;

port_data_t* f() {
    port_data_t* ports = (port_data_t*)calloc(4, sizeof(port_data_t));
    return ports;
}
于 2009-03-09T05:55:37.657 回答
0

正如 Jeffamaphone 所指出的,task_data_t 与上下文无关。Crashworks 还指出,如果您希望将结构数组放入 port_data,请尝试 sizeof (port_data_t)。

使用 sizeof (port_data*) 将使其将 sizeof 指针分配给 port_data_t 的指针,这在大多数情况下仅在大多数情况下才有用。

于 2009-03-09T05:50:48.170 回答