我正在声明和打印简单的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);
}