【问题标题】:int array inside a struct inside a struct结构内的 int 数组
【发布时间】:2013-06-13 00:44:30
【问题描述】:

我正在尝试实现这一点...一个包含结构数组的单个容器,每个结构内部都有一个表示整数的单个 int 数组,如下所示... 12,345 将在 int 数组 [5 ]={1,2,3,4,5}

有什么方法可以实现。我对这个实现的主要问题是我迷失了所有指向任何地方的指针,我开始到处都是垃圾数据和到处都是段错误。哦,是的,顺便说一句,一切都是动态的。好吧,我猜几乎所有的东西,如果你有一个结构容器,里面有一个结构,如果容器是 malloc'd 那么它里面的结构也会自动 malloc'd 所以我的猜测是

容器->struct.array

不确定????

【问题讨论】:

标签: c arrays struct malloc


【解决方案1】:

您需要自己编写结构和容器的 malloc 和 free 函数,并在每次需要容器或释放其空间时调用它们,例如:

struct outside{
    struct inside *in;
};


struct inside{
    int *array;
};

struct outside *malloc_outside(size_t n) {
    int i;
    struct outside *o;
    o = (struct outside *)malloc(n*sizeof(struct outside));
    for(i=0;i<n;i++) {
        o->in = malloc(sizeof(struct inside));
        o->in->array = NULL;
    }
    return o;
}


void free_outside(struct outside *out) {
    free(out->in->array);
    free(out->in);
    free(out);
    return;
}

和 malloc() 数组的空间是你在 malloc_outside() 之后需要多少

构造函数和析构函数在 C++ 中更容易实现。

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解,但请查看以下代码:

    struct MyStruct {
        int *array;
    };
    struct Container {
        struct MyStruct *array;
    };
    

    分配部分是这样的:

    struct Container c;
    c.array = malloc(sizeof(struct MyStruct) * NUM_STRUCTS);
    
    for (i = 0; i < NUM_STRUCTS; ++i) {
        c.array[i].array = malloc(get_num_of_digits(12.345) * sizeof(int));    
    }
    

    我还没有测试过这段代码,但应该可以完成这项工作:P。祝你好运。

    【讨论】:

      【解决方案3】:

      包含一个结构数组的结构,该结构包含一个整数数组。没有指针,正如你所问的那样

      #define SIZE (8)
      
      typedef struct {
          struct data {
              int idata[SIZE];
          };
          struct data arr[SIZE];
      }record;
      
      //or
      struct data {
          int idata[SIZE];
      };
      
      typedef struct data arr[SIZE];
      

      【讨论】:

        猜你喜欢
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 2019-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多