c++ - 内存分配练习

标签 c++ c memory memory-management

编写一个程序,要求用户输入 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

ma​​lloc 函数不会将值初始化为零,但我仍然得到零。

最佳答案

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

您更有可能在调试版本中看到它,其中一些 C++ 运行时在程序启动时将其堆内存的很大一部分清零,以便让您更容易看到何时使用它。尽管在我看来,这使得您无法初始化数据这一点不太清楚,正如这个问题所示。

关于c++ - 内存分配练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804408/

相关文章:

c - 字符串数组 malloc 后出现 "error reading characters of string"错误

.net - 调试应用程序中的巨大内存泄漏

PHP - 函数内的函数。是好是坏?

c++ - 允许在 Debug模式 Visual Studio 中内联特定 header

C++ - 如何在另一个类中使用私有(private)构造函数实例化对象

c - 错误 C2143 : syntax error : missing ';' before ')'

c - 使用 Microsoft Media Foundation 从非文件源解码音频

c - 需要一种优化堆使用的方法 C - Freebsd/glibc

c++ - XGrabKeyboard 后无法取消键盘抓取

c++ - 从挤压多边形构建多面体