记忆分配练习

时间:2014-11-07 15:20:54

标签: c++ c memory memory-management

编写程序,要求用户输入浮点数据的总数。然后用 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函数没有将值初始化为零,但仍然为零。

1 个答案:

答案 0 :(得分:1)

如果您未初始化值,则可以获取任何数据。零是一种有效的“任何数据”。

您更有可能在调试版本中看到它,其中一些C ++运行时在程序启动时将其大部分堆内存清零,以便您更容易看到何时使用它。虽然,在我看来,它使更少明确表示您未能初始化您的数据,如此问题所示。