2

这是我的 C 代码,它给我带来了问题:

int main(){
int Steps = 100;
double Time = 10;
double h = Time/Steps;

double r[Steps+1];
double phi[Steps+1];
double u[Steps+1];
double v[Steps+1];

r[0]=0;
phi[0]=0;
u[0]=0;
v[0]=0;

FILE *fp;
fp = fopen("results.dat", "w");

if(fp == NULL){
    printf("Could not open results.dat \n");
    exit(0);
}

int i;
for(i=0; i<Steps; i++){
    fprintf(fp, "%f, %f \n",r[i], phi[i]);
}

fclose(fp);
}

当我查看 dat 文件时,几乎所有条目都是 0.0,除了少数具有巨大数字的条目。它看起来很随机,我还没有说过要为任何东西分配任何值。有谁知道为什么会出现这些数字?

4

2 回答 2

5

您要求堆栈上的大块内存,但不对其值进行检查或分配,从而得到内存中发生的任何内容。我希望某些字节最终会设置更高值的位,从而在您的读写中为您提供“随机”数据。看看memset(3)malloc(3)

于 2013-05-15T03:27:51.047 回答
1

正如其他人所提到的,您的阵列在堆栈上。这些堆栈变量未初始化,将反映分配它们的堆栈的内容。将它们移出 main 并使它们成为全局或初始化它们,例如 int r[10] = {0}; 或 calloc/malloc,memset 数组。

于 2013-05-15T04:22:38.310 回答