[英]How to declare a global array of structs and use it in different functions?
从OO语言(C#)切换后,我想知道在C中声明具有应用程序生存期的结构数组的最佳方法是什么。经过1h的艰苦努力(例如,研究为什么不使用typedef,为什么要重复) struct等),此代码有效:
// declaration
struct server {
char* name;
char* ip_address;
int port;
} server;
struct server *servers; // declaring struct server[] servers; does not work
然后在函数中像这样使用,也可以正常工作(在对&和* ...进行多次实验之后):
// nb_servers is known from previous calculation
servers = malloc(nb_servers * sizeof(struct server));
// later in the same function
free(servers);
问题
为什么用[]
声明结构数组不起作用? 问题实际上是,是否还可以使用'[]'(未知大小)声明一个数组,然后稍后使用malloc动态初始化它,如果是,执行的语法是什么? 纯粹的语法问题,与内存管理方式的差异无关。
如果我free(servers)
,之后将无法再使用这些值。 但是,如果我不这样做,则如果多次调用此函数,此变量的值会被新调用的结果简单覆盖吗? 不释放servers
会导致内存泄漏吗?
希望很清楚,我是C的100%新手。
是否还可以使用[[]”(未知大小)声明一个数组,然后稍后使用malloc动态初始化它?
否。声明数组时,其大小必须已知。 可以通过在方括号中显式地指定大小来完成此操作,也可以通过其初始化程序对其进行推断。 一旦设置了大小,它将在整个生命周期中保持该大小。 从最严格的意义上讲, malloc
不会创建“数组”,而是返回指向内存段的指针,该内存段可以在语法上类似于数组,但在意义上并不是真正意义上与声明的对象相同的数组与[]
。
不释放服务器会导致内存泄漏吗?
是的,如果你免费不送,就会有内存泄漏servers
之前malloc
荷兰国际集团更多的内存它没有释放。 如果您只需要调整数组大小而不丢弃数据,则可以使用realloc
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.