我的问题是:这两行代码有什么区别:
int ptr[4046];
bzero(ptr, 4046);
int *ptr;
ptr = (int *)malloc(sizeof(int) * 4046);
bzero(ptr, 4046);
我提出这个问题是因为当我想输出ptr
时,第一个打印一些0然后是垃圾(随机数字),而第二个(使用malloc
)只打印0,就像我希望的那样。我使用printf
来输出,如下:
int i = 0;
while (i++ < 4046)
printf("%x", ptr[i]);
编辑: 感谢大家的回答, 答案是:int类型的大小不是1个字节,而是4个字节。因此前4046个字节是有效的,之后我打印计算机在堆栈中找到的内容。
bzero
似乎无法完全将基于堆栈的数组置零,但在动态数组上似乎可以正常工作,并且您想知道原因?您似乎知道动态和自动存储之间的区别。那么,这是关于bzero
显然不按您的预期工作吗? - WhozCraig