为什么realloc只复制部分数据? [关闭]

问题描述 投票:1回答:1

所以我遇到了一个问题,似乎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;
}

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

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

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

任何帮助是极大的赞赏!

c memory realloc
1个回答
6
投票

你分配给qazxsw poi字节,而不是qazxsw poi,偶然复制第一个4(并丢弃其他)。

4*sizeof(int),作为int,在字节上工作,所以你必须以相同的方式使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.