编辑:对不起我缺乏睡眠并且看不到正确的东西,我感到抱歉。
谢谢大家
我不知道为什么或如何,但是我仔细检查了代码,然后崩溃了,这是生成de crash的代码示例,但我不明白。
我曾就此事经历过其他问题,但尝试人们给出的解决方案仍然没有效果。我尝试阅读的txt格式如下:
0 0 -1.000047e + 000
0 1 -1.000047e + 000
0 2 -1.000047e + 000
0 3 -1.000047e + 000
0 4 -1.000047e + 000
0 5 -1.000047e + 000
1 0 -1.000047e + 000
1 1 -1.000047e + 000
并且提取失败的代码,我没有任何时间/如果/任何考虑到达文件末尾或类似的东西,因为我总是知道有多少个.txt必须读取(它已创建)通过我以前编写的程序,顺便说一下,我对C还是比较陌生的:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
const int Nx=88; // lattice size X
const int Ny=44; // lattice size Y
double *phi;
int main() {
int i, j, ki, kj, index;
FILE * conf;
FILE * fp;
fp = fopen ("test.txt","w+");
conf = fopen ("InitConditions.txt", "r"); /* open the file for reading */
ki=0;
kj=0;
for (i=0; i<Nx; i++){
for (j=0; j<Ny; j++){
index=get_index(i,j);
printf("%i",index);
fscanf(conf,"%i %i %lf", &ki, &kj, &phi[index]);
}
}
return (0);
}
int get_index(int i, int j){
int index;
index=i*Ny+j;
return index;
}
错误是这样的
进程终止,状态为-1073741819(0分钟,7秒)
我不明白
最佳答案
fscanf()
,将崩溃,因为您在那里使用&phi[index]
,但是phi
并不指向您已分配的内存。
您需要首先分配所需的内存。
if((phi = malloc(Nx * Ny * sizeof(double))) == NULL) { /* Allocate memory */
/* Error handling code */
exit(1);
}
/* ... */
/* ... */
for (i=0; i<Nx; i++) {
for (j=0; j<Ny; j++) {
index=get_index(i,j);
printf("%i",index);
if (fscanf(conf,"%i %i %lf", &ki, &kj, &phi[index]) != 3) {
/* Code to handle fscanf failure */
}
}
}
/* .... */
/* .... */
free(phi); /* Free the allocated memory when it is not needed anymore */