假设我们有一个 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'd。这背后的故事是什么,当我对结构进行 malloc 时,我没有对内存进行 malloc 吗?strdup() 有什么区别?