struct があるとしましょう:
struct Person {
char *name;
};
struct Person *Person_create(char *name){
struct Person *who = malloc(sizeof(struct Person));
assert(who != NULL);
who->name = strdup(name);
return who;
}
void Person_destroy(struct Person *who){
assert(who != NULL);
free(who->name);
free(who);
}
そして主な機能:
int main(int argc,char *argv[]){
struct Person *mike = Person_create("mike");
Person_print(mike);
Person_destroy(mike);
return 0;
}
上記のコードは、strdup() 関数がないと正しく動作しません。Valgrind は、free(who->name) で解放しようとしているアドレスは malloc されていないと言っています。この背後にある話は何ですか。構造体を malloc したときに、そのメモリを malloc しませんでしたか? そして、strdup() はどのような違いを生むのでしょうか?