为什么在C中,堆内存中的数组中只有一个奇怪的元素,而其他元素都正常?

为什么在C中,堆内存中的数组中只有一个奇怪的元素,而其他元素都正常?,c,heap-memory,C,Heap Memory,我制作了一个程序,将一个包含整数的主数组分离为两个包含奇数和偶数整数的动态分配数组 除了奇数和偶数数组中的一个元素外,其他元素都很好,您可以在输出图片中看到。我希望你明白我的意思。此外,任何关于改进代码的提示都是非常受欢迎的。提前感谢:) 代码: #包括 #包括 无效打印阵列(整数*阵列,整数大小){ 对于(int i=0;i

我制作了一个程序,将一个包含整数的主数组分离为两个包含奇数和偶数整数的动态分配数组

除了奇数和偶数数组中的一个元素外,其他元素都很好,您可以在输出图片中看到。我希望你明白我的意思。此外,任何关于改进代码的提示都是非常受欢迎的。提前感谢:)

代码:

#包括
#包括
无效打印阵列(整数*阵列,整数大小){
对于(int i=0;i
输出:
evenArr=realloc(evenArr,sizeof(evenArr)+sizeof(int))
不正确,因为它总是分配相同的大小,因为
sizeof(evenArr)
是常量。你想要:

evenArr = realloc(evenArr, evenArrSize * sizeof *evenArr);

您还需要正确地增加尺寸。在中,您需要在调用realloc之前增加它,而不是在调用realloc之后。虽然对每个数据点增加1和realloc有点不典型。一种常见的模式是仅在需要时将大小加倍,或增加大于1的块大小。

使用
realloc()
无法正确增长数组

sizeof(oddArr)
是指针的大小,而不是指针指向的数组的大小。因此,每次调用
realloc()
都是在分配相同大小的数组,而不是增加大小

这需要:

oddArr = realloc(oddArr, (oddArraySize + 1) * sizeof(int));

对于偶数数组,您必须执行相同的操作。

sizeof(oddArr)
不会执行您认为它会执行的操作。它与
sizeof(int*)
相同,而不是
malloc
缓冲区的大小。需要将1添加到
evenArrSize
,因为它尚未增加。是的,这就是问题所在。“非常感谢您,先生。”麦科维奇好吧,那么,请在允许的情况下尽快记下这个答案。
oddArr = realloc(oddArr, sizeof(oddArr) + sizeof(int));
oddArr = realloc(oddArr, (oddArraySize + 1) * sizeof(int));