gpt4 book ai didi

c - 指针取消引用顺序的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:31 25 4
gpt4 key购买 nike

我正在尝试阅读矩阵,如下所示:我已经在 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。我在这里缺少什么?

最佳答案

所使用的分配只需要一个指针。

#include <stdio.h>
#include <stdlib.h>

typedef struct _Matrix {
int *data; //single pointer
int m;
int n;
} Matrix;

Matrix *read_matrix(void) {
Matrix *A;
int i, j;

A = malloc(sizeof(Matrix));
if(A == NULL) {
return NULL;
}

printf("Enter m : ");
scanf("%d", &A->m);
printf("Enter n : ");
scanf("%d", &A->n);

A->data = malloc(A->m * A->n * sizeof(int));
if(A->data == NULL) {
return A;
}
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", &A->data[( j * A->m) + i]);
}
}
return A;
}

int main() {
Matrix *A;
int i;
int j;

A = read_matrix();
if ( A) {
if ( A->data) {
for(i=0; i<A->m; ++i) {
for(j=0; j<A->n; ++j) {
printf("A[%d][%d]= %d\n", i, j, A->data[( j * A->m) + i]);
}
}
free(A->data);
}
free(A);
}
return 0;
}

关于c - 指针取消引用顺序的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com