c - 在结构中添加数组后出现段错误(核心已转储)

标签 c arrays struct

我试图在结构中添加一个名为 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/

相关文章:

java - 如何通过NAT通过公网IP发送UDP数据包?

c - 这个程序怎么可能有意义?

c++ - 无法对包含字符串 C++ 的结构数组进行操作

c - 尝试再次打开时未出现 Gtk 对话框

php - 在 php 中循环遍历多维数组并执行 mysql 插入(股票数据)

python - 增量构建 numpy 数组的最佳方法是什么?

javascript - 对数组中的选定项目进行排序 (javascript)

c - C中结构的不同语法

c++ - 包含字符串值的结构在使用动态内存分配创建后在分配时导致段错误

c - 为什么 C 允许我们将 2D 数组视为 1D 数组?