【问题标题】:How can I allocate Array of Structure with malloc() in C?如何在 C 中使用 malloc() 分配结构数组?
【发布时间】:2018-09-21 06:48:32
【问题描述】:

我想分配结构数组,但使用 GCC 时出现此错误:

st.c:在函数'main'中:
st.c:20:4:错误:从“void *”类型分配给“struct employeeStruct”类型时不兼容的类型 *sp=malloc(sizeof(struct productStruct)*n);

这是我的结构和指针:

struct productStruct
{
        unsigned int ID;
        unsigned long int serialnumber;
        char name[40];
};

struct productStruct *sp;

在主函数从用户那里获取 n 变量后:(我收到此行的错误)

*sp=malloc(sizeof(struct *productStruct)*n);

我不知道这可能是类型转换错误,但我无法修复它。 感谢您的关注

【问题讨论】:

  • 只要sp=malloc(sizeof(struct *productStruct)*n);不要取消引用你会没事的
  • sp 是指针,*sp 是取消引用的指针。
  • @Jean-FrançoisFabre 我认为他更想要这个:sp = malloc(sizeof(struct productStruct) * n)
  • 是的,刚刚意识到里面有奇怪的东西。更好的是:sp=malloc(sizeof(*sp)*n); 所以如果类型发生变化,malloc 保持一致

标签: c arrays pointers malloc structure


【解决方案1】:

您有 2 个错误:

使用sp 而不是*sp 并保留结构的大小,而不是指向结构的指针的大小(如果你真的想要一个结构数组而不是指针):

sp=malloc(sizeof(struct productStruct)*n);

【讨论】:

  • 不易出错:sp = malloc(sizeof *sp * n);
  • 公平地说,我一直觉得sizeof struct type_t 更具可读性,由于类型名称的独立性,您的做法使重构更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2021-05-13
  • 2021-05-29
  • 2015-11-09
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多