在函数

时间:2016-03-19 22:08:09

标签: c pointers return

我正在和C玩。只是有几个问题,哪个是最佳做法,如果我做错了什么。

我制作了一个似乎有用的程序:

void main()
{
     char *text;
     text = malloc(10 * sizeof(char));
     dosomethingwithtext(text);
     printf("%s\n", text);
}

然而,我也看到过这样的版本:(我知道它不会打印任何有意义的东西,因为我没有添加任何字符,但想象我有!)

void main()
{
    char *text;
    text = dosomething();
    printf("%s\n", text);
}
char * dosomething()
{
    char *text;
    text = malloc(10 * sizeof(char));
    return text;
}

或者,如果其中任何一个不是最佳的,那么最好的方法是什么。基本上我会问最常见/最好的方法。

2 个答案:

答案 0 :(得分:1)

a)在这两种情况下,您都无法释放内存。必须通过免费电话来平衡对malloc的调用。

b)sizeof(char)在C中定义为1,因此没有任何一点调用sizeof(char)

c)不是void main(),而是int main(void)int main(int argc, char** args) - 您需要提供返回值。

要回答实际问题,要么是好的。可以说,在你的第二种情况下,你更难管理内存,因为你不能将free()放在与malloc()相同的函数中 - 你的dosomething()返回一个已分配的块。但是,最终会有一些程序在一个地方分配而在另一个地方免费。

答案 1 :(得分:-1)

选项1具有在同一范围内进行分配和解除分配的优点,即(基于完全基于意见的)更容易跟踪和调试。您可以使用返回值来报告某种状态。

选项2遵循Creational pattern,在非托管内存上容易发生泄漏。唯一可能的状态报告是空指针。 (可能也可能不够)。