0

我是 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 Force force 工作正常;但是,当我尝试定义 struct Measurement meas 时,我得到“未处理的异常”错误!

4

3 回答 3

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...
于 2012-08-10T06:24:41.220 回答
1

从技术上讲,它就像你写的那样工作,但是成员不需要 struct word(实际上会产生警告但有效。)

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 分配一些内存并将其视为结构(没有时间测试它,但我多次使用这种方法)。

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

// after use
free(m);

就这样。

于 2012-08-10T06:42:08.747 回答
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;
于 2012-08-10T06:23:57.550 回答