C-在为2D数组设置值的设置值时,即使循环计数器值在数组的尺寸内



我正在声明和打印简单的2D数组或矩阵。

我得到的是由嵌套的循环引起的分割故障,该循环设置了矩阵的值。

int rows, columns;
rows = columns = 3;
int **matrix;
matrix = malloc(sizeof(int) * rows);
for (int i = 0; i < columns; i++) {
    matrix[i] = malloc(sizeof(int) * columns);
}

这会抛出SEG故障

for (int i = 0; i < rows; i++) {            
    for (int j = 0; j < columns; j++) {
        matrix[i][j] = 1;
    }
}

如果我设置I = 1,则没有SEG。故障。

for (int i = 1; i < rows; i++) {            
    for (int j = 0; j < columns; j++) {
        matrix[i][j] = 1;
    }
}

但是,它确实使前3个值随机打印。

--------

整个代码

int main(int argc, char const *argv[]) {

int rows, columns;
rows = 3;
columns = 3;
int **matrix;
matrix = malloc(sizeof(int) * rows);
for (int i = 0; i < columns; i++) {
    matrix[i] = malloc(sizeof(int) * columns);
}
for (int i = 0; i < rows; i++) {            
    for (int j = 0; j < columns; j++) {
        matrix[i][j] = 1;
    }
}
for (int i = 0; i < rows; i++) {            
    for (int j = 0; j < columns; j++) {
        matrix[i][j] = 1;
    }
}
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < columns; j++) {
        printf("%dn", matrix[i][j]);
    }
}
for (int i = 0; i < rows; i++) {
    free(matrix[i]);
}
free(matrix); 
return 1;
}

您的问题在这里:

int **matrix;
matrix = malloc(sizeof(int) * rows);

您希望 matrix int 的指针的数组,但是您使用" sizeof int"而不是" size of int int pointer"。尝试:

int **matrix;
matrix = malloc(sizeof(int*) * rows);

或更好的

int **matrix;
matrix = malloc(rows * sizeof *matrix);

@n.m在评论中指出,以下内容:

for (int i = 0; i < columns; i++) {
    matrix[i] = malloc(sizeof(int) * columns);
}

是错误的。应该是:

for (int i = 0; i < rows; i++) {   // Notice this change
    matrix[i] = malloc(sizeof(int) * columns);
}

相关内容

  • 没有找到相关文章

最新更新