繁体   English   中英

在C中访问malloc的二维数组

[英]Accessing malloc'd 2-D array in C

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

我尝试访问a [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]);

是错的。 这个访问i个的元件a和可能是无效的,当i>0 你想要的应该是

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM