C中的Realloc无效指针

时间:2011-10-23 22:38:48

标签: c pointers realloc

这是一项家庭作业,所以我不想发布任何代码,但我对我所拥有的错误感到非常难过。

目前我有一个已被malloced的数组并且正在复制指向数组的指针。现在,我可以使用这个数组进行memcpy和memmove,并且工作正常。

然而,当我对它进行realloc时会出现无效的指针错误 - 我完全不知道为什么。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

realloc()仅在您传递的指针是先前从malloc()calloc()realloc()(或NULL返回的指针时才有效,在这种情况下它的工作原理与malloc())完全相同。

您无法在阵列上调用它。如果你有这样的struct

struct foo {
    char a;
    int x[5];
    double z;
};

然后您无法使用realloc()来增加x的大小。您必须转而使用完全动态分配:struct成员更改为指针:

struct foo {
    char a;
    int *x;
    double z;
};

...当您创建struct的实例时,请拨打malloc()进行初始分配:

struct foo f;

f.x = malloc(5 * sizeof f.x[0]);

现在,您可以在realloc()上致电f.x,但费用是,当不再需要该结构时,您还必须在free()上调用f.x

答案 1 :(得分:1)

你说'我将指向这个数组的指针复制到另一个变量'。问题是,只要执行realloc,原始指针就不再有效。我没有看到将指针复制到变量的原因?

答案 2 :(得分:1)

reallocfree导致无效指针错误或段错误时,并且您确定您正在传递从malloc获取的有效指针,然后很可能是你损坏了你的记忆:你写了malloc存储内存块簿记的区域。在您的情况下,这是memcpymemmove来电。

您可以使用valgrind内存错误检测器来帮助您找到这类错误。