在这里学习新学,请解释下面的问题,我从很多天里自己学习,我确实有一些 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"
。