我正在處理一個處理貝葉斯網絡的應用程序,我使用下面的結構來表示一個模型,它基本上只是一個轉換矩陣和一個列表狀態。當處理結構中嵌入的矩陣時出現分段錯誤
typedef struct {
char **states; /* Array of state names */
double **transition_mat; /* Transition matrix */
} model_t;
但是,當我嘗試使用模型的轉換矩陣時,出現了分割錯誤。我實例化一個模型如下:
model_t *model = malloc(sizeof(model_t));
model->transition_mat = malloc(NUM_STATES * sizeof(double *));
for (int i = 0; i < NUM_STATES; i++) {
model->transition_mat[i] = malloc(NUM_STATES * sizeof(double));
}
(這裏,NUM_STATES
簡直狀態,該模型的數量)。隨着NUM_STATES = 8
我已經初始化的模型上面,然後我嘗試以下方法:
model->transition_mat[6][2] = 0.121;
導致上述分段錯誤。
有人看到爲什麼會發生這種情況?我相信我正確地分配內存,但這似乎是我的錯誤的來源。
使用您發佈似乎並不有一個調試器和後的結果。至於代碼任何問題 。 – ameyCU
如果'NUM_STATES'是'#define',爲什麼不簡化您的生活,並且在結構中只有'double transition_mat [NUM_STATES] [NUM_STATES];' – unwind
檢查你的函數調用的結果,當它對你很重要時。 'malloc()'*的返回值總是對你很重要。當出現錯誤時它是'NULL',並且如果由於不被注意而滑落,那麼隨後的解引用會產生未定義的行爲(可能是段錯誤)。除非'NUM_STATES'非常大,但你不知道,這不太可能是你的問題。 –