内存分配练习

Memory allocation excercise

本文关键字:练习 分配 内存      更新时间:2023-10-16

编写一个程序,要求用户输入浮点数据的总数。然后使用calloc()和malloc()函数分配两个内存块由数字指定的相同大小,并打印出两个mem的初始值-层砌块。

我的解决方案是:

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++运行时在程序启动时清空了大部分堆内存,以便更容易地看到你在使用它。尽管在我看来,这让你无法初始化数据变得越来越明显,正如这个问题所示。