我是一个学习C ++的java程序员,有一个关于函数的问题。这两者之间有什么区别:
main()
{
    struct person myperson;
    myperson = myfunction();
    return;
}
struct person myfunction()
{
     struct person myPerson;
     myPerson.firstname = "John";
     myPerson.lastname = "Doe";
     return myPerson;
}VS
main()
{
    struct person *myperson;
    myperson = myfunction();
    return;
}
struct person* myfunction()
{
     struct person *myPerson;
     myPerson = malloc(sizeof(struct person));
     myPerson->firstname = "John";
     myPerson->lastname = "Doe";
     return myPerson;
}这些在C中是合法的吗?你会选择一个而不是其他。非常感谢大家!
发布于 2011-09-07 21:48:09
第一个函数分配堆栈上的变量。myfunction中的person对象是从函数中复制并返回的,效率较低,但不会出现内存泄漏。
第二个示例返回一个指向动态分配(使用malloc)的person对象的指针( *)。由malloc分配的person对象永远不会被销毁,除非你显式地调用free(),而你没有这样做--所以你有一个内存泄漏。
你需要在C中显式地释放内存,它没有像Java那样的垃圾回收。
https://stackoverflow.com/questions/7334891
复制相似问题