首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局变量和函数封装

全局变量和函数封装
EN

Stack Overflow用户
提问于 2016-06-26 08:59:54
回答 2查看 257关注 0票数 0

我有一个C程序,它在main()中动态地分配内存,并给出它的地址给本地到main()的指针变量。我更喜欢在函数中分配内存,并使main()尽可能简单。为此,我必须将指向分配内存的指针变量设置为全局变量。然而,当函数使用全局变量时,函数的封装就会丢失,因此以后不能在其他程序中重用。在这方面是否有最佳做法公约?我应该维护简单的main()函数,其中包含最小的逻辑,还是不依赖于全局变量的自包含函数。还有其他不使用全局变量的原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-26 10:18:37

这在很大程度上取决于你在做什么。

如果您只是在一些没有多次调用的函数中使用malloc,并且确信可以确保每个指针在适当的时候被释放,只需从函数中返回指针即可。

更优雅的解决方案可能是将句柄传递给函数。因此,在main中声明指针,并通过引用将其作为参数传递,并让函数修改它。

如果您有重复调用和使用malloc的函数,并且这些指针必须不正常地释放,那么某种类型的表保存所有地址,然后返回数字ids而不是指针,这是很优雅的,但是查找垃圾收集,如果是这样的话,可以考虑您自己的分配器。这可能会变得更复杂,而且围绕这类事情有很多理论。

虽然我认为,最有可能的是通过句柄对你最有效。下面是一个例子。

代码语言:javascript
复制
void test ( char* &p ){
    p = (char *) malloc (10);
    if ( p == NULL ) exit(1);
}
void main () {
    char * p;
    test(p);
    free(p);
}
票数 0
EN

Stack Overflow用户

发布于 2016-06-26 09:43:19

您可以将指针变量返回给main,而不是使它们成为全局变量。请记住,从堆中分配的内存只有在释放时才会超出作用域,因此它们与函数中声明的局部变量不一样,因此将它们返回给调用方是安全的,然后调用方可以使用它,然后释放该内存。

重要的是,从堆中分配的内存只有在返回到空闲存储时才会超出作用域,而不一定是在函数返回时。通过返回指向该内存位置的指针,您可以按自己的意愿重用它,但始终记住要释放它

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38036841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档