矩阵复制会导致分段错误

时间:2017-05-23 20:59:39

标签: c pointers segmentation-fault

我必须在C中编写一个函数,它接受一个矩阵(src)和两个整数值(x,y),然后给出一个包含src x y次的矩阵。 例如

${BOOST_ROOT}/stage

与(2,3)将是

3 5
2 1

我得到了结构

3 5 3 5    
2 1 2 1    
3 5 3 5    
2 1 2 1    
3 5 3 5    
2 1 2 1

并写了这个函数:

struct Mat {
  int cols; // number of columns
  int rows; // number of rows
  int** row_ptrs; // pointer to rows (the actual matrix)
} Mat;

然后我给了一些测试程序:其中一半工作正常,另一个很难给我分段测试。我确信测试是正确的,所以我的程序一定有问题。你能帮我找到吗?

1 个答案:

答案 0 :(得分:4)

循环中的条件

  for(int i = 0; i < newMat->cols; i++)
                     ^^^^^^^^^^^
    newMat->row_ptrs[i] = calloc(newMat->cols, sizeof(int));

错了。必须有

  for(int i = 0; i < newMat->rows; i++)
                     ^^^^^^^^^^^
    newMat->row_ptrs[i] = calloc(newMat->cols, sizeof(int));

注意:我认为你的意思是

typedef struct Mat {
^^^^^^^
  int cols; // number of columns
  int rows; // number of rows
  int** row_ptrs; // pointer to rows (the actual matrix)
} Mat;