技術上講,它的工作原理是你寫的,但結構字是不必要的成員(實際上產生警告,但工程。)
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;
};
然後:
delete m->F1;
delete m->F2;
delete m;
還有一個辦法:
Measurement* m = new Measurement;
if (m) {
m->F1 = new Force;
m->F2 = new Force;
}
使用,你必須刪除所有的指針,以避免內存泄漏後。使用:
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);
就這樣。所有這將有助於我們的
首先回答你的問題,如果你告訴我們,你_how_使用'meas'變量,當你得到了「撞車」更好。其次,當遇到「崩潰」時,你應該首先做的第一件事是在調試器中運行你的程序。它將幫助您找到崩潰的地點,並讓您檢查變量以幫助您瞭解崩潰的原因。 – 2012-08-10 06:41:58
如果你說你在問題中學習C,你爲什麼要堅持把標籤改爲C++? – 2012-08-10 06:43:08
這段代碼看起來不錯。 「動態分配」部分在哪裏? – 2012-08-10 06:43:36