2017-10-15 82 views
0

我想为struct,mallocs的内存,并设置字段的指针作出结构的构造函数。但是,当我打印我相信我已经设置的内容时,我看到这些字段是空的。我也使用C99结构指针设置值

void init_student(struct student* student, char* name, int id, float gpa) { 
    student = (struct student*) malloc(sizeof(struct student)); 
    student->name = name; 
    student->id = id; 
    student->gpa = gpa; 
} 
+0

您正在覆盖'student',而不是修改它。 –

+0

这是不够的代码来知道你在做什么。你给这个函数的参数是什么?你如何使用我返回的结构?最好使[mcve] –

回答

3

您正在分配到student,您的函数参数。函数参数是按值传递的,所以调用者永远不会看到你分配的内存。对于这一点,你需要的呼叫者的变量进行修改,并且你可以通过指针实现,要

void init_student(struct student** student, char* name, int id, float gpa) { 
    *student = malloc(sizeof(struct student)); 
    ... 
} 

和或者称其为

struct student* student; 
init_student(&student, ...); 

,使指针返回值:

struct student* new_student(char* name, int id, float gpa) { 
    struct student* student = malloc(sizeof(struct student)); 
    ... 
    return student; 
} 

然后

struct student* student = new_student(...); 

顺便说一句,你不需要投malloc的结果,而这样做在C通常气馁,因为它可能隐藏了有关失踪#include指令警告。另外,如果内存不足,malloc可能会失败。在这种情况下,您不应该尝试解引用返回的空指针。

+1

..或者只是将函数的指针返回给分配的内存。 – haccks

+0

@haccks事实上,我只是在您发表评论时对其进行编辑。 :) – hvd