我正在尝试加载由numpy创建的2D数组并读取C中的元素,但是在运行它时出现Segmentation fault(core dumped)错误。代码按
的行进行
#include <stdio.h>
#include <string.h>
int main(){
char *file;
FILE *input;
int N1, N2, ii, jj;
float element;
strcpy(file, "/home/caesar/Desktop/test.bin");
input = fopen(file, "rb");
fread(&N1, sizeof(int), 1, input);
fread(&N2, sizeof(int), 1, input);
float memoryarray[N1][N2];
for(ii= 0; ii<N1; ii++){
for(jj=0; jj<N2; jj++){
fread(&element, sizeof(float), 1, input);
memoryarray[ii][jj]= element;
}
}
printf("%f", memoryarray[2][3]);
fclose(input);
return 0;
}
这是一项任务的开始,在该任务中,我必须从400 * 400 * 400左右的矩阵中读取元素。想法是从文件中读取所有元素并将其存储在内存中,然后在必要时从内存索引明智地进行读取,例如,在这里,我正在尝试访问和打印第二行第三列中的元素。
PS:我对指针还很陌生。
亲爱的,我尝试了您说的方法。这里是代码的修改版本,分段错误已消失,但输出要么全为零,要么只是纯垃圾值。我运行了三次可执行文件,得到的输出是输出1:-0.000000输出2:0.000000输出3:-97341413674450944.000000
我的数组包含整数btw
这里是代码的修改版本
#include <stdio.h>
#include <string.h>
void main(){
const char file[] ="/home/caesar/Desktop/test.bin";
FILE *input;
int N1, N2, ii, jj;
float element;
//strcpy(file, "/home/caesar/Desktop/test.bin");
input = fopen(file, "r");
fread(&N1, sizeof(int), 1, input);
fread(&N2, sizeof(int), 1, input);
float memoryarray[N1][N2];
for(ii= 0; ii<N1; ii++){
for(jj=0; jj<N2; jj++){
fread(&element, sizeof(float), 1, input);
memoryarray[ii][jj]= element;
}
}
printf("%f", memoryarray[1][2]);
fclose(input);
[这也是我要打开的文件的十六进制转储。你们中的一些人要求我验证fopen()是否正常工作,我检查了它是否正常工作。
00000000 03 00 00 00 03 00 00 00 01 00 00 00 00 00 00 00 |................|
00000010 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 |................|
*
00000030 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................|
00000040 05 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 |................|
00000050
strcpy(file, "/home/caesar/Desktop/test.bin");
这将写入垃圾内存地址。您应该将文件声明为适当大小的数组,如下所示:
char file[100];
或
直接用这样的路径初始化char指针(并删除strcpy):
const char *file = "/home/caesar/Desktop/test.bin";
或根据共同的共识,是最好的(请参阅评论):
fopen("/home/caesar/Desktop/test.bin", "rb");