我正在編寫C++代碼來處理從實驗室測量中填充的一串直方圖。當我嘗試更好地組織問題時,我遇到了問題,並且我認爲我的問題來自錯誤處理指針和/或結構。初始化和維護結構體的結構
我的原始設計看起來是這樣的:
// the following are member variables
Histogram *MassHistograms[3];
Histogram *MomentumHistograms[3];
Histogram *PositionHistograms[3];
,其中每個陣列的元素0相應於一個實驗室測量,每個元件1對應於另一個,等等。我可以經由MassHistograms[0]
或訪問各個直方圖相似,而且工作正常。然而,該組織對我來說似乎並不合適 - 如果我要執行新的測量,則必須爲每個直方圖數組添加一個元素。相反,我想出了
struct Measurement {
Histogram *MassHistogram;
Histogram *MomentumHistogram;
Histogram *PositionHistogram;
};
隨着複雜性的添加了一層,我更想根據已對他們的數據進行處理,以捆綁這些測量,所以我做了
struct MeasurementSet {
Measurement SignalMeasurement;
Measurement BackgroundMeasurement;
};
我覺得這個安排更合理和可擴展性,但它不工作;-)如果我有一個像
MeasurementSet ms;
Measurement m = ms.SignalMeasurement;
Histogram *h = m.MassHistogram;
代碼,然後嘗試做的東西與h
,我得到分段故障。由於類似的代碼以前工作正常,我認爲我沒有正確處理我的代碼中的結構。具體來說,結構是否需要以任何方式顯式初始化? (Histogram
由別人的圖書館提供,只是宣佈Histogram *SomeHistograms[4]
之前就已經初始化了。)
我很感謝反饋意見。我用Python和Clojure的體面familar,但我有限的C++的知識並不延伸到[什麼似乎像]的關懷和結構的飼養:-)
我最終什麼事做的奧祕
我轉身Measurement
成一個全面的類:
class Measurement {
Measurement() {
MassHistogram = new Histogram();
MomentumHistogram = new Histogram();
PositionHistogram = new Histogram();
};
~Measurement() {
delete MassHistogram;
delete MomentumHistogram;
delete PositionHistogram;
};
Histogram *MassHistogram;
Histogram *MomentumHistogram;
Histogram *PositionHistogram;
}
(通用Histogram()
構造我稱之爲正常工作)我有被總是通過引用傳遞Measurement
解決了問題等問題;否則,將在接收到Measurement
的任何函數結束時調用析構函數,並且下一次嘗試使用其中一個直方圖執行某些操作時會發生段錯誤。
謝謝大家的回答!
嘗試閱讀直方圖庫 – lovesh