这是我的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,除了少数具有大数字的条目。它似乎是随机的,我还没有说过要为任何东西分配任何值。有谁知道这些数字出现的原因?
答案 0 :(得分:5)
你要求堆栈上有大块内存,但不要对它们的值进行检查或赋值,从而得到内存中发生的任何事情。我希望有些字节最终会设置更高值的位,从而在读写时提供“随机”数据。请查看memset(3)
和malloc(3)
答案 1 :(得分:1)
正如其他人提到的那样,你的阵列就在你的阵容中。这些堆栈变量未初始化,并将反映分配它们的堆栈内容。要么将它们移出main,要使它们全局化或初始化它们,例如int [r] = {0};或calloc / malloc,memset数组。