【问题标题】:How to initialize an array after dynamic memory allocation?动态内存分配后如何初始化数组?
【发布时间】:2009-09-04 16:26:03
【问题描述】:

我有一个函数,它根据表查找返回一个不同长度的数组。我在函数内部为它分配了所需的内存,但是我怎样才能从它的指针中填充数组呢? 编译器对我的两次尝试都抛出了相同的错误(注释行)。请帮忙!

int lookup(const char *name, float *factors) {
    int length;
    if(!strcmp(name, "foo")) {
        length = 6;
        factors = malloc(length * sizeof(float));
        // *factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
        // factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
    }
    else if(!strcmp(name, "bar"))
    {
        length = 4;
        factors = malloc(length * sizeof(float));
        // *factors = {0, -3, -6, -9};
    }
    // .......................
    // more else if branches
    // .......................
    else    // error: name not found in table
    {
        factors = NULL;
        fprintf(stderr, "name not found in table!!\n");
        return 0;
    }
    return length;
}

【问题讨论】:

    标签: arrays initialization malloc dereference


    【解决方案1】:

    使用数组表示法 - 因子[索引]。

    【讨论】:

      【解决方案2】:
      static const float[] initials = { .... };
      factors = malloc(sizeof(initials));
      memmove(factors,initials,sizeof(initials));
      

      【讨论】:

      • 我有这个想法,但没有更优雅的方式吗?
      • 嗯,很优雅。另一种解决方案是不分配任何内存,而只分配factors = initials,但是,当然,如果您以后要修改因子,那将行不通。
      【解决方案3】:

      自从我直接编写 C 代码以来已经有一段时间了,所以请原谅一些小错误,但请尝试

      const float[] initialValue = {0, -0.9, -4.9, -8, -7.8, -23.9};
      for (int i=0; i<length; i++)
      {
          factors[i] = initialValue[i];
      }
      

      基本问题是您试图使用初始化常量的语法来初始化动态变量。

      【讨论】:

      • 抱歉,这行不通。每次查找我都有不同的向量要返回。
      • 此代码用于代替 // 因素 = {0, -0.9, -4.9, -8, -7.8, -23.9}; 行。您仍然需要 malloc 内存。很高兴您找到了适合您的解决方案。
      • 实际上,“工作解决方案”(我认为你指的是我的)使用相同的技术——从静态数组复制数据,只是快一点。对于这两种解决方案,都需要为每个向量定义一个静态数组。
      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多