我试图在结构中添加一个名为 shape
的数组,但是一旦我添加它并尝试访问成员 values
,它就会产生段错误。如果我删除它,该程序将完美运行。
这是结构定义:
struct coo_matrix{
int nnz;
int shape[2];
int * rows;
int * columns;
int * values;
};
typedef struct coo_matrix * COOMatrix;
这是我尝试访问 values
的函数:
COOMatrix coo_matrix_create(int m, int sparse_matrix[][m]){
...
COOMatrix coo;
coo = malloc(sizeof(COOMatrix));
coo->rows = malloc(n * m * sizeof(int));
coo->columns = malloc(n * m * sizeof(int));
coo->values = malloc(n * m * sizeof(int));
....
....
coo->rows[k] = i;
coo->columns[k] = j;
coo->values[k] = sparse_matrix[i][j]; // see Note
....
return coo;
}
注意:一旦我添加形状,这条线就会产生段错误。
PS:不用说我对C不是很熟悉,最近没接触C之前学了其他语言。
最佳答案
您在该代码中有几个问题。首先,您将 COOMatrix 声明为指针,然后通过使用它来获取基础结构的大小来混淆事物。其次,您将行、列和值声明为指向 int 的指针,然后使用 sizeof(COOMatrix) 分配它们。由于第一个错误,第二个错误可能实际上取决于机器但不是您想要的。所以
struct coo_matrix{
...
};
typedef struct coo_matrix COOMatrix;
COOMatrix *coo_matrix_create(int m, int sparse_matrix[][m]){
...
COOMatrix *coo;
coo = malloc(sizeof(COOMatrix));
coo->rows = malloc(n * m * sizeof(int));
coo->columns = malloc(n * m * sizeof(int));
coo->values = malloc(n * m * sizeof(int));
....
....
coo->rows[k] = i;
coo->columns[k] = j;
coo->values[k] = sparse_matrix[i][j]; // see Note
....
return coo;
}
应该更近一些
关于c - 在结构中添加数组后出现段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43967258/