c - C 中结构体的指针数组

标签 c arrays pointers struct

我在指针和数组方面遇到了非常糟糕的时间,我真的需要帮助。

有一个具有以下结构的练习:

typedef struct student_node{
  unsigned number;
  const char *name;
  unsigned class;
  struct student_node *next;
} StudentNode;

我必须实现这个功能:

void groupStudentByClass(StudentNode *classes[], StudentNode students[], size_t num_students)

我的问题是我想更改类中的数字之类的内容并打印该值,但我不能。它给了我“段错误(核心转储)”。但我不明白为什么...

这是测试代码:

size_t nClasses=3;
StudentNode *classes [nClasses];
classes[0]->number=0;
printf("%u\n",classes[0]->number);

顺便说一句,我不能使用 malloc 和分配内存的东西。

最佳答案

@Matthias 已经解释了为什么您会获得 segv。

如果您不能使用 malloc,那么您需要预先分配结构。类似的东西

const size_t MAX_STUDENT = 1024;
StudentNode studentPool[MAX_STUDENT];
int studentLast = -1;

那么你需要一个分配例程

StudentNode* StudentGet()
{
    if (++studentLast >= MAX_STUDENT)
    {
        /* Print error message and exit */
    }
    return studentPool[studentLast];
}

接下来,当你需要分配时

classes[0] = StudentGet();

然后您可以完成作业并打印。

您可能还需要编写例程来释放结构并将它们返回到池中。

关于c - C 中结构体的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43417924/

相关文章:

c - 写入关闭的文件描述符不会引发错误

c - C 中的长 double

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

c - 错误 : invalid type argument of unary '*' (have 'int' )

c - c中如何存储有符号和无符号整数?

ios - 向数组添加对象不起作用

c - 二维数组的问题

C++:使用指向数组的指针

c - 为什么我在这段代码中出现缓冲区溢出?

c - C中的结构和数组问题