【问题标题】: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];