【问题标题】:Storage size is unknown存储大小未知
【发布时间】:2015-09-13 00:21:44
【问题描述】:

我正在尝试学习 C,但我在使用它附带的整个内存分配方面遇到了问题。我不知道在哪里创造空间。这是我提供的标题。

typedef struct list_item {
    char *value;
    struct list_item *next;
    struct list_item *prev;
} list_item_t; 

typedef struct single_list {
    list_item_t *head;
    list_item_t *tail;
} slist_t;

void init(slist_t *list);

我用以下方法实现了 init 函数:

void init(slist_t *list){
    list->head = (list_item_t *) malloc(sizeof(list_item_t));
    list->tail = (list_item_t *) malloc(sizeof(list_item_t));
}

但我使用运行代码

int main(){
    struct list_t test;
    init(test);
    return 0;

我收到一条错误消息,提示“测试”的存储大小未知。我知道我必须定义测试空间,但我应该在哪里写这个以及如何写?谢谢大家。

【问题讨论】:

  • struct list_t 在哪里定义?您正在显示一个名为 slist_t 的类型定义。
  • 您不应该为自定义类型使用后缀_t。另外,不要将 malloc 和朋友的结果投射到 C 中。
  • 另外,init slist_t 的先驱,而不是struct list_t。 (不评论 slist_tlist_t 之间的区别,但事实上一个是指针,另一个不是。)

标签: c memory struct size storage


【解决方案1】:

替换:

struct list_t test;

slist_t test;

您的类型名为struct single_list,您也可以使用您创建的别名slist_t

请注意,您随后希望将指针传递给对象:

init(&test);

【讨论】:

  • @Forrest4096 我在您发表评论的同时添加了一个编辑
  • 是的,更像是这样
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
相关资源
最近更新 更多