【问题标题】:Why is realloc only copying part of the data? [closed]为什么 realloc 只复制部分数据? [关闭]
【发布时间】:2019-02-20 08:51:32
【问题描述】:

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

    您将重新分配给4 字节,而不是4*sizeof(int),后者只是先复制int(并丢弃其他)。

    reallocmalloc 一样,适用于字节,因此您必须以相同的方式使用它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2016-02-17
      相关资源
      最近更新 更多