【问题标题】:Fill typedef struct by function in c在c中按函数填充typedef struct
【发布时间】:2017-06-14 04:06:41
【问题描述】:

我想按函数填充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);
}

在使用 Bad Ptr 值调用 ReadPerson tmp 之后。

【问题讨论】:

  • 为什么在ReadPerson() 内(第二次)调用malloc()
  • 没有意义,你为什么要“mallocing”两次?
  • 问题也可能出在readString()。请提供一个最小、完整且可验证的示例。
  • 不理解您的问题——尤其是“在使用错误的 Ptr 值调用 ReadPerson tmp 之后。”部分——好吧,这可能是 C Programming: malloc() inside another function - Stack Overflow 的副本。
  • 你在函数中分配给person的本地副本;这并没有改变main() 中的指针。您要么需要返回分配的结构(并且参数是不必要的),要么需要将指针传递给指向函数的指针。

标签: c struct malloc typedef dynamic-memory-allocation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多