c - 矩阵复制导致分段错误


我必须用 C 编写一个函数,该函数接受一个矩阵 (src

( 和 2 个整数值 (x,y(,然后给出一个包含 src x 的矩阵。例如

3 5
2 1

与 (2,3( 将是

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;

并编写了这个函数:

#include "exercise_1.h"
#include <stdlib.h>
Mat* matrixRepeat(Mat* src, int num_row_blocks, int num_col_blocks) 
{
  Mat *newMat = malloc(sizeof(Mat));
  newMat->rows = src->rows * num_row_blocks;
  newMat->cols = src->cols * num_col_blocks;
  newMat->row_ptrs = calloc(newMat->rows, sizeof(int*));
  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++)
    for(int j = 0; j< newMat->cols; j++)
      newMat->row_ptrs[i][j] = src->row_ptrs[i%src->rows][j%src->cols];
  return newMat;
}

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

循环中的条件

  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;

相关内容

  • 没有找到相关文章