gpt4 book ai didi

c - 在 C 中访问 malloc 的二维数组

转载 作者:行者123 更新时间:2023-11-30 16:58:40 28 4
gpt4 key购买 nike

我有一个函数 read_mat() ,它需要从文件中读取并将值放入一个二维数组中,该数组通过引用作为参数传递。使用 malloc() 为其正确分配内存后,我无法将值放入数组的倒数第二个位置。其大小为 N x M,其中 N 是行,M 是列。

尝试访问 [0][3] 后出现段错误,我认为这应该是第一行的最后一列,但显然它不存在于内存中?使用 stdio.h、stdlib.h 和我的“header.h”文件。

编辑:n = 3,m = 4

int read_mat(int *n, int *m, double ***a) {

//open file
FILE *fp = fopen("matrix.dat", "r");
if (fp == NULL) {
fprintf(stderr, "File open failed!\n");
return -1;
}

//scan first line for size
fscanf(fp, "%d %d", n, m);

//TESTING
printf("Size of n(rows): %d\n", *n);
printf("Size of m(columns); %d\n", *m);

//malloc 1-d array of n # pointers
*a = malloc(*n * sizeof(double*));

//malloc space for m # of columns per row
for (int i = 0; i < *n; i++) {
(*a)[i] = malloc(*m * sizeof(double));
}

//TESTING
fprintf(stderr, "passed malloc!\n");

//scan values and fill array
//rows loop
for (int i = 0; i < *n; i++) {
printf("value of i: %d\n", i);
//column loop
for (int j = 0; j < *m; j++) {
printf("value of j: %d\n", j);
fscanf(fp, "%lf", a[i][j]);
printf("accessed a[%d][%d]!\n", i, j);
}
}

最佳答案

线路

fscanf(fp, "%lf", a[i][j]);

是错误的。这会访问a的第i元素,并且当i>0时可能无效。你想要的应该是

fscanf(fp, "%lf", &(*a)[i][j]);

添加一些代码来检查 fscanf() 是否成功将使您的代码变得更好。

关于c - 在 C 中访问 malloc 的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640471/

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