繁体   English   中英

如何声明结构的全局数组并在不同的函数中使用它?

[英]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);

问题

  1. 为什么用[]声明结构数组不起作用? 问题实际上是,是否还可以使用'[]'(未知大小)声明一个数组,然后稍后使用malloc动态初始化它,如果是,执行的语法是什么? 纯粹的语法问题,与内存管理方式的差异无关。

  2. 如果我free(servers) ,之后将无法再使用这些值。 但是,如果我不这样做,则如果多次调用此函数,此变量的值会被新调用的结果简单覆盖吗? 不释放servers会导致内存泄漏吗?

希望很清楚,我是C的100%新手。

是否还可以使用[[]”(未知大小)声明一个数组,然后稍后使用malloc动态初始化它?

否。声明数组时,其大小必须已知。 可以通过在方括号中显式地指定大小来完成此操作,也可以通过其初始化程序对其进行推断。 一旦设置了大小,它将在整个生命周期中保持该大小。 从最严格的意义上讲, malloc不会创建“数组”,而是返回指向内存段的指针,该内存段可以在语法上类似于数组,但在意义上并不是真正意义上与声明的对象相同的数组与[]

不释放服务器会​​导致内存泄漏吗?

是的,如果你免费不送,就会有内存泄漏servers之前malloc荷兰国际集团更多的内存它没有释放。 如果您只需要调整数组大小而不丢弃数据,则可以使用realloc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM