【发布时间】:2016-05-31 09:51:41
【问题描述】:
我正在尝试读取矩阵,如下所示: 我已经在 Cygwin 和 MinGW 编译器上试过了。
#include <stdio.h>
#include <stdlib.h>
typedef struct _Matrix {
int **data;
int m;
int n;
} Matrix;
Matrix *read_matrix(void) {
Matrix *A;
int i, j;
int **ptr;
A = (Matrix *) malloc(sizeof(Matrix));
if(A == NULL) {
return NULL;
}
printf("Enter m : ");
scanf("%d", &A->m);
printf("Enter n : ");
scanf("%d", &A->n);
ptr = (int **) malloc(A->m * A->n * sizeof(int));
/*-- >> A->data = ptr; << --*/
if(A->data == NULL) {
return NULL;
}
printf("\n");
for(i=0; i<A->m; ++i) {
for(j=0; j<A->n; ++j) {
printf("Enter element [%d][%d] : ", i, j);
scanf("%d", &ptr[i][j]);
}
}
A->data = ptr;
return A;
}
int main() {
Matrix *A;
A = read_matrix();
free(A->data); /* A-- A->data is NULL --*/
free(A);
return 0;
}
如果我在读入值之前设置A->data,我会得到SEGMENTATION FAULT。
但是,这里的代码似乎没有崩溃。但是A->data 返回NULL。我在这里错过了什么?
【问题讨论】:
-
ptr = (int **) malloc(A->m * A->n * sizeof(int));?为什么要分配sizeof(type)并期望将其用作type**?避免这种情况的一种方法是ptr = malloc(A->m * A->n * sizeof(*ptr));,它会自动执行正确的操作。 -
试试
ptr = (int**) malloc(A->m * A->n * sizeof(int**)); -
@hagrawal:没有。只是没有。
-
@user2338150 你能指出你究竟在什么地方、什么时候出错。
-
ptr[i][j]:ptr[i]未初始化(指向未分配的内存)。
标签: c pointers struct segmentation-fault dereference