C - 为什么 malloc 在 GCC 编译器中将 O 作为默认值


嗨,我

在这里学习新学,请解释下面的问题,我从很多天里自己学习,我确实有一些 malloc 功能的 dout.请帮助我知道这个网站不适合初学者,但我无法找到找到解决方案的替代方法

 1) p=malloc(0) // what  will it return ?when i calculate size using sideof operator   it    throw 4 byte?
2) int *p=malloc(4) // when i scan string it throw 0 why sir?
3)  *p=2   // while p is store in heap
   scanf("%d",*p)//why *p is not possible to scanf here *p why p only?
  4) int *p=(int*)malloc(20*sizeof(int))
  for(i=0;i<5;i++)
p[i]=i+1;
free(p);
//now after free i am still get same previos value.. why not garbage coz malloc default value is garbage?
5)   int main()
{
 int *p;
 p=(int*)malloc(4);
 printf("%dn",*p); // even here i am getting 0 why nt garbage?
 }

谢谢你,先生

">

释放"的意思是"再次可供分配"。不会自动删除/覆盖内存内容,因为这会对性能产生负面影响。如果您希望将区域设置为一个值,则必须在调用 free(( 之前自己执行此操作。不过,这在发布代码中是不好的做法(除了数据安全原因之外的任何其他原因(。

分配内存时也是如此:它不会设置为任何特定值,而是包含它之前碰巧包含的内容。如果要将其初始化为零,请使用 calloc() 。如果要将其设置为特定的其他值,请在分配后使用 memset()。同样,请考虑这会对性能产生影响,并且通常不是必需的。

至于你的最后一个问题,"%d"关于有符号整数的。对于无符号,请使用 "%u"

相关内容

  • 没有找到相关文章

最新更新