为什么realloc只复制部分数据?

Cal*_*hon 1 c memory realloc

所以我遇到了一个问题,似乎realloc没有复制缓冲区中的所有数据,所以我决定运行以下代码作为测试.

#include <stdlib.h>

int main(int argc, char** argv)
{
    int* tmp_array = malloc(sizeof(int) * 2);
    tmp_array[0] = 1;
    tmp_array[1] = 2;
    tmp_array = realloc(tmp_array, 4);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我最初遇到的同样问题仍在发生,只有部分数据被复制.缓冲区中的1被复制,但2不复制.我首先为2个整数分配足够的空间,所以如果tmp_array的赋值应该是有效的.然后重新分配到4似乎有效.我甚至尝试将返回的realloc指针显式地转换为int*,但这没有帮助.

不幸的是,我无法在调试器(VS 2017)中显示我的内存窗口的屏幕截图,但它肯定会在realloc之前显示缓冲区中的1和2,并且只在realloc之后显示缓冲区中的1.

我确信我可以通过使用malloc和memcpy手动复制数据来重新实现realloc自己,但我仍然只想知道为什么这不起作用.

任何帮助是极大的赞赏!

Jac*_*ack 6

你正在重新分配到4字节,而不是4*sizeof(int),它只是偶然复制int(并丢弃其他).

realloc,as malloc,对字节工作,所以你必须以相同的方式使用它们.