运行 int 一个奇怪的场景,其中 malloc 分配的内存比我要求的多:
void function (int array [], int numberOfElements) {
int *secondArray = malloc(sizeof(int) * numberOfElements/2);
for (int i = 0; i < numberOfElements / 2; i++) {
secondArray[i] = array[i];
}
}
假设数组是大约 10 个数字。当我在上面的代码之后打印出 secondaryArray 时,我得到:
![enter image description here](https://i.stack.imgur.com/oV8d5.png)
所以首先,数组应该有 5 个元素。但第二,为什么最后是0?我只为 10/2 = 5 个整数分配空间。
EDIT:
打印代码:
for (int d = 0; d < numberOfElements; d++) {
printf("%i ", secondArray[d]);
}
嗯,我可能刚刚在这里回答了我自己的问题,我猜是第二个数组之外的打印显示 0,而不是数组本身。
-
事实上,问题是我也没有这样做:
secondArray[numberOfElements] = '\0';
这就是为什么它打印得更远。
malloc
实际上分配的是正确的数量。
但是,您正在访问超出分配范围的内存。
那里存在的东西是完全未定义的,实际上可能是任何东西。
就您而言,它是一个“垃圾”数字和四个零。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)