我试图在C中编写一个程序,使用malloc()
为2d数组分配内存,然后我必须用一个文件中的数据填充这个数组(4列,559行数字)。 / p>
我的程序编译,但它在运行时出现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;}
你可以想象我不是很熟练,请尽量善良和清楚。
答案 0 :(得分: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);
}