Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中按函数填充typedef结构_C_Struct_Malloc_Typedef_Dynamic Memory Allocation - Fatal编程技术网

在c中按函数填充typedef结构

在c中按函数填充typedef结构,c,struct,malloc,typedef,dynamic-memory-allocation,C,Struct,Malloc,Typedef,Dynamic Memory Allocation,我想按函数填充typedefstruct。我试过: typedef struct{ char *first_name, *last_name; int id; Date birthday; } Person; void ReadPerson(Person* person){ person = (Person*)malloc(sizeof(Person)); person->first_name = readString(); person-

我想按函数填充
typedef
struct。我试过:

typedef struct{
    char *first_name, *last_name;
    int id;
    Date birthday;
} Person;

void ReadPerson(Person* person){
    person = (Person*)malloc(sizeof(Person));
    person->first_name = readString();
    person->last_name = readString();
    scanf("%d",&(person->id));
    ReadDate(&(person->birthday));
}
主要功能:

void main(){
    Person *tmp = NULL;
    ReadPerson(tmp);
}

在使用错误的Ptr值调用
ReadPerson
tmp
之后。

如果在定义同一代码段中的变量时将其malloc,可能会更加优雅。如果要定义“Person*tmp”将信息存储在main()中,那么也可以在main()中使用malloc。删除ReadPerson()上的malloc。

为什么在
ReadPerson()中对
malloc()
进行第二次调用?毫无意义,为什么要“mallocing”两次?问题也可能出在
readString()
中。请提供一个最小的、完整的、可验证的示例。不理解您的问题,尤其是“调用
ReadPerson
tmp
后,Ptr值不正确。”部分-嗯,这可能是的重复。您在函数中分配给
person
的本地副本;这并没有改变
main()
中的指针。您需要返回分配的结构(不需要参数),或者需要传递指向函数指针的指针。