编写程序,要求用户输入浮点数据的总数。然后用 calloc()和malloc()函数用于分配两个内存块 由数字指定的相同大小,并打印出两个mem的初始值 ory blocks。
我的解决方案是:
float *p_1,*p_2;
int i,num_of_floats=0;
printf("the total number of float numbers: ");
scanf("%d",&num_of_floats);
if((p_1=calloc(num_of_floats,sizeof(float)))==NULL||(p_2=malloc(num_of_floats*sizeof(float)))==NULL){
printf("error at alllocating!!\n");
exit(1);
}
else{
for(i=0; i<num_of_floats ;i++){
printf("%f",*(p_1+i));
}
printf("\n");
for(i=0; i<num_of_floats ;i++){
printf("%f",*(p_2+i));
}
}
free(p_1);
free(p_2);
return 0;
输出:
the total number of float numbers: 5
0.0000000.0000000.0000000.0000000.000000
0.0000000.0000000.0000000.0000000.000000
malloc函数没有将值初始化为零,但仍然为零。
答案 0 :(得分:1)
如果您未初始化值,则可以获取任何数据。零是一种有效的“任何数据”。
您更有可能在调试版本中看到它,其中一些C ++运行时在程序启动时将其大部分堆内存清零,以便您更容易看到何时使用它。虽然,在我看来,它使更少明确表示您未能初始化您的数据,如此问题所示。