0

我正在尝试用 C 语言编写一个程序,malloc()用于为二维数组分配内存,然后我必须用文件中的数据(4 列,559 行数字)填充这个数组。

我的程序确实编译了,但它在运行时给出了 SIGSEGV 错误。

这是代码:

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

int main(){

    FILE *pf;
    pf = fopen("Union_sin.txt","r");

    int rows = 559;
    int columns = 4;
    int i =0;
    int j=0;
    float **matrix;
    matrix = (float **)malloc(rows*sizeof(float *));
    for(i=0;i<rows;i++){
        matrix[i] = (float *)malloc(columns*sizeof(float *));
    }

    for (i=0; i<rows; i++){
            for (j=0; j<columns; j++)
                fscanf(pf,"%f\t",&matrix[i][j]);
    }
    for(i=0;i<rows;i++){
        for(j=0;j<columns;j++){
            printf("%f\t", matrix[i][j]);}
        printf("\n");}
    for(i=0;i<rows;i++) free(matrix[i]);
    free(matrix);
    return 0;}

正如您可以想象的那样,我不是很熟练,所以请尽量保持友善和清晰。

4

1 回答 1

2

这一行:

   matrix[i] = (float *)malloc(columns*sizeof(float *));

应该

   matrix[i] = malloc(columns*sizeof(float));

请注意,除了分配正确的内存量外,还删除了冗余和危险的演员表。(您也应该删除第一个 malloc 上的演员表。)

另一个问题:你完全没有检查调用 fopen 的错误。假设文件已成功打开是灾难的根源。像这样构造你的代码:

FILE * pf = fopen("Union_sin.txt","r");
if (f == NULL)
{
    // report error
}
else
{
    // do your stuff

    fclose(pf);
}
于 2013-10-20T14:38:08.193 回答