编写一个程序,要求用户输入 float 据的总数。然后使用 calloc() 和 malloc() 函数分配两个内存块 相同大小的数字指定,并打印出两个mem-的初始值 理论 block 。
我的解决方案是:
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 函数不会将值初始化为零,但我仍然得到零。
最佳答案
如果您不初始化值,则可以获得任何数据。零是一种有效的“任何数据”。
您更有可能在调试版本中看到它,其中一些 C++ 运行时在程序启动时将其堆内存的很大一部分清零,以便让您更容易看到何时使用它。尽管在我看来,这使得您无法初始化数据这一点不太清楚,正如这个问题所示。
关于c++ - 内存分配练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804408/