C 中重新分配无效指针

pra*_*432 0 c pointers realloc

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

目前我有一个已分配空间的数组,并将指针复制到该数组。现在,我可以使用这个数组进行 m​​emcpy 和 memmove,效果很好。

然而,当我用它进行重新分配时,会出现无效指针错误 - 我完全不知道为什么。

有人可以帮忙吗?

caf*_*caf 5

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

您不能在数组上调用它。如果你有struct这样的情况:

struct foo {
    char a;
    int x[5];
    double z;
};
Run Code Online (Sandbox Code Playgroud)

那么你就不能使用realloc()来增加 的大小x。您必须改为使用完全动态分配:结构成员更改为指针:

struct foo {
    char a;
    int *x;
    double z;
};
Run Code Online (Sandbox Code Playgroud)

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

struct foo f;

f.x = malloc(5 * sizeof f.x[0]);
Run Code Online (Sandbox Code Playgroud)

现在您可以调用realloc()on f.x,但代价是当不再需要该结构时您还必须调用free()on 。f.x