我在指针和数组方面遇到了非常糟糕的时间,我真的需要帮助。
有一个具有以下结构的练习:
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/