我正在和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;
}
或者,如果其中任何一个不是最佳的,那么最好的方法是什么。基本上我会问最常见/最好的方法。
答案 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,在非托管内存上容易发生泄漏。唯一可能的状态报告是空指针。 (可能也可能不够)。