我在C中运行模拟,需要存储3个100x100矩阵〜1000次。当我不将数据写入文件时,我的程序运行得很好。但是,当我运行我的程序并写入数据时,经过250个时间步后,出现分段错误。我不明白为什么。fprintf问题
我保存函数看起来像这样
void saveData(Simulation* sim, int number) {
sprintf(pathname_vx, "data/xvel%d.dat", number);
sprintf(pathname_vy, "data/yvel%d.dat", number);
sprintf(pathname_rho, "data/rho%d.dat", number);
FILE* vx_File = fopen(pathname_vx, "w");
FILE* vy_File = fopen(pathname_vy, "w");
FILE* rho_File = fopen(pathname_rho, "w");
int iX, iY;
double ux, uy, rho;
for (iY=0; iY<sim->ly; ++iY) {
for (iX=0; iX<sim->lx; ++iX) {
computeMacros(sim->lattice[iX][iY].fPop, &rho, &ux, &uy);
fprintf(vx_File, "%f ", ux);
fprintf(vy_File, "%f ", uy);
fprintf(rho_File, "%f ", rho);
}
fprintf(vx_File, "\n");
fprintf(vy_File, "\n");
fprintf(rho_File, "\n");
}
fclose(vx_File);
fclose(vx_File);
fclose(vy_File);
}
其中 '模拟' 是含有晶格(100×100矩阵)与3个不同的变量的RHO'一个结构, 'UX', 'UY'。 '数字'参数只是一个计数变量,用于正确命名文件。
gdb说以下,但它并没有多大帮助。
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000010
0x00007fff87c6ebec in __vfprintf()
我在编程方面没有那么丰富的经验,所以我想有更好的方法将数据写入文件。任何试图澄清为什么我的方法不起作用的高度赞赏。
感谢
乔恩
你能告诉我们究竟哪一条线给了麻烦吗? – BlackBear 2011-03-11 18:14:03
感谢大家的输入。正如Elecric Wig指出的,我在我的fclose声明中有一个明显的错误。对不起,问一个愚蠢的问题。 012 – jonalm 2011-03-12 00:55:26