为什么重新分配仅复制部分数据?

时间:2018-09-16 03:12:28

标签: c memory realloc

因此,我遇到了一个问题,似乎realloc并未将所有数据复制到缓冲区中,因此我决定运行以下代码作为测试。

ax1

我原来仍然遇到同样的问题,仅复制了部分数据。缓冲区中的1被复制,但是2不被复制。我首先要为2个整数分配足够的空间,所以如果对tmp_array的分配都应该有效。然后重新分配为4似乎有效。我什至尝试将返回的realloc指针显式转换为int *,但这没有帮助。

不幸的是,我无法在调试器(VS 2017)中显示内存窗口的屏幕截图,但它肯定在重新分配之前在缓冲区中显示了1和2,而在重新分配之后仅在缓冲区中显示了1。

我敢肯定,只要使用malloc和memcpy手动复制数据,我就可以重新实现重新分配自己的功能,但是我仍然只是想知道为什么这不起作用。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

您要重新分配到4个字节,而不是4*sizeof(int)个字节,这偶然会仅复制第一个int(并丢弃其他字节)。

reallocmalloc一样,对字节有效,因此必须以相同的方式使用它们。