首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构calloc

结构calloc
EN

Stack Overflow用户
提问于 2009-03-09 05:43:22
回答 5查看 30.9K关注 0票数 0

C99 gcc

我一直收到这个错误。我在main外部有一个结构体。在main内部,我尝试使用calloc在堆栈上进行分配。我似乎找不到出了什么问题。

谢谢你的建议,

错误:‘)’标记前应有表达式

代码语言:javascript
复制
/* 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*));
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-09 05:48:03

应为变量名:注意* _befor_e变量名称。

票数 9
EN

Stack Overflow用户

发布于 2009-03-09 05:47:20

应为sizeof(port_data_t)而不是sizeof(port_data*)。前者的大小相当于一个port_data_t结构。后者并不意味着什么。

票数 4
EN

Stack Overflow用户

发布于 2009-03-09 05:51:57

尝试更改此设置:

代码语言:javascript
复制
struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));

要这样做:

代码语言:javascript
复制
port_data = (struct port_data_t*) calloc(4, sizeof(*port_data));

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

代码语言:javascript
复制
port_data = (struct port_data_t*) calloc(4, sizeof(struct port_data_t));

但是我不喜欢把变量放在sizeof()中。我试着坚持把类型放在那里,只是出于习惯。此外,它解决了任何关于指针需要如何精确地解除引用的歧义,这在这种情况下会让你犯错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/625138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档