【问题标题】:C Initializing type defined structure pointersC初始化类型定义的结构指针
【发布时间】:2016-01-26 07:31:27
【问题描述】:

嗯,我在初始化全局定义的类型结构时遇到了问题。

类型定义为:

typedef struct {
    pthread_t pthread;
    int status;
    int id;
    time_t entrada;
} Cliente;

我使用的全局声明是这样的:

Cliente *cola=malloc(sizeof(Cliente));

但编译器说它必须由一个 CONSTANT 定义

目标是拥有一个名为 cola 的 Cliente 类型的动态数组。 如果我没有很好地初始化它们,我会在执行 0.00 秒时出现分段错误。 将其作为全局变量的原因是因为它是线程之间共享的资源,我知道这不是最佳实践,但我必须这样做。

我不知道我会有多少个 Cliente(可能是默认数字或一个 argv 随机输入)所以这就是我实现和结构指针的原因。

提前致谢:)

【问题讨论】:

  • 由于初始化器不是常量表达式,你必须在函数中执行初始化。
  • Tom Karzes,但是如果我不知道我需要多少成员,我该如何初始化一个数组结构指针呢?
  • 好吧,在您的示例代码中,您正试图为恰好一个分配空间。你当然可以在一个函数中做同样的事情。但是,如果实际上您希望做一些与您的样本不同的事情,那么只需等到您知道您想要多少,然后将其分配为一个数组。如果该值发生变化,您可以使用realloc 来增加数组的大小。

标签: c compiler-errors initialization posix


【解决方案1】:

在全局范围内定义它并在首次使用之前为其分配内存。例如:

Cliente* cola;

int main(int argc, char** argv)
{
    if (argc < 2) {
        perror("First arg indicates thread numbers and is required");
    }

    int thread_count = atoi(argv[1]);
    cola = malloc(sizeof(*cola) * thread_count);
    ...
    // Extend cola size without losing previous data
    cola = realloc(cola, sizeof(*cola) * (thread_count + x));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多