gpt4 book ai didi

c - 处理嵌入结构中的矩阵时出现段错误

转载 作者:行者123 更新时间:2023-11-30 17:10:14 25 4
gpt4 key购买 nike

我正在开发一个用 C 语言处理贝叶斯网络的应用程序。我有以下结构来表示模型,它本质上只是一个转换矩阵和状态列表。

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;

这会导致上述的段错误。

有人知道为什么会发生这种情况吗?我相信我正确分配了内存,但这似乎是我错误的根源。

最佳答案

是什么阻止你做这样的事情(因为你似乎有 NUM_STATES 作为#define 无论如何。

typedef struct {
char states[NUM_STATES]
double transition_mat[NUM_STATES][NUM_STATES]
} model_t;

此外,始终检查 malloc() 是否返回 NULL。因为这意味着内存分配失败。如果你的程序漏掉了这个错误,然后你尝试使用一个你无法分配内存的东西,那么你基本上是在要求出现段错误。

关于c - 处理嵌入结构中的矩阵时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com