在Struct中动态分配多个Struct

时间:2012-08-10 06:20:37

标签: c++

我是C ++的新手,需要一些帮助。 我有以下代码:

struct Force {
    float X[10];
    float Y[10];
    float Z[10];
};

struct Measurement{
    char serial_number[30];
    struct Force F1;
    struct Force F2;
 };

我应该如何正确分配以下内容?

struct Measurement meas

问题是结构力部队工作正常;但是,当我尝试定义struct Measurement meas时,我得到“Unhandled exception”错误!

3 个答案:

答案 0 :(得分:2)

正如我在你的问题中所看到的,你正在使用C,所以这里是C的解决方案。

只要您想拥有结构测量实例,只需输入:

即可
struct Measurement meas;

您将能够以下列方式访问您的结构元素:

meas.F1.X and so on...

如果您希望动态分配(即在运行时),那么只需使用malloc / calloc,如下所示

struct Measurement *meas = (struct Measurement *)malloc(sizeof(struct Measurement));

这样做,您将必须访问您的结构元素:

meas->F1.X and so on...

答案 1 :(得分:1)

从技术上讲,它就像你写的一样,但成员上不需要结构词(实际上会产生警告但是有效。)

struct Force {
    float X[10];
    float Y[10];
    float Z[10];
};

struct Measurement {
    char serial_number[30];
    Force F1;
    Force F2;
};

然后在函数使用中这样:

Measurement somevar;
somevar.F1.Y = 999;

现在正确的方法(并保存堆栈)是使用指针。

struct Measurement {
    char serial_number[30];
    Force* F1;
    Force* F2;
};

然后:

Measurement* m = new Measurement;
if (m) {
    m->F1 = new Force;
    m->F2 = new Force;
}

使用后必须删除所有指针以避免内存泄漏:

delete m->F1;
delete m->F2;
delete m;

还有另一种方法。使用:

struct Force {
    float X[10];
    float Y[10];
    float Z[10];
};

struct Measurement {
    char serial_number[30];
    Force F1;
    Force F2;
};

您可以使用malloc分配一些内存并将其视为struct(没有时间对其进行测试,但我多次使用该方法)。

Measurement* m = (Measurement*)malloc(sizeof( size in bytes of both structs ));
// zero memory on m pointer

// after use
free(m);

这就是全部。

答案 2 :(得分:0)

C:

struct Measurement *meas;
meas=(struct Measurement *) malloc(sizeof(Measurement));
              ^                             ^                         
              |                             |                 
              |                             |                
          this is shape                  this is the space allocated

C ++:

Measurement *meas;
meas=new Measurement;