内存分配练习[关闭]

Posted

技术标签:

【中文标题】内存分配练习[关闭]【英文标题】:Memory allocation excercise [closed] 【发布时间】:2014-11-07 15:20:53 【问题描述】:

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

我的解决办法是:

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 函数不会将值初始化为零,我仍然得到零。

【问题讨论】:

你有什么问题? 这可能是巧合 - 零与任何其他不确定值一样可能。或者它可能是由于您使用运行时将调试中的所有内存归零而运行调试构建造成的。 malloc 函数不会将值初始化为零,但我仍然得到零。所以输出不正确。这不是巧合,我尝试了很多输入。 @MorHaham:这种逻辑存在严重缺陷。 @NeilKirk:这不是问题。 【参考方案1】:

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

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

【讨论】:

是否可以为每个输入仅获取零?这么多次? @MorHaham:是的。有没有可能你没有看我回答的第二段? 非常感谢女士

以上是关于内存分配练习[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在堆上分配内存还是传递工作内存? [关闭]

CUDA实例练习:页锁定主机内存

引用传递和动态内存分配之间有啥区别[关闭]

C中的内存分配问题[关闭]

无法在分配的内存中执行查询[关闭]

如何知道分配给定内存块的内容? [关闭]