C中的Realloc无效指针

C中的Realloc无效指针,c,pointers,realloc,C,Pointers,Realloc,这是一个家庭作业,所以我不想发布任何代码,但我已经被我的bug难住了 目前,我有一个已被malloced的数组,正在复制指向该数组的指针。现在,我可以用这个数组来实现memcpy和memmove,效果很好 然而,当我使用它执行realloc时,会出现一个无效指针错误——我完全不知道为什么 有人能帮忙吗 您说过“我将指向此数组的指针复制到另一个变量中”。问题是,只要执行realloc,原始指针就不再有效。我看不出将指针复制到变量的原因?realloc()仅当您传递的指针是先前从malloc()、c

这是一个家庭作业,所以我不想发布任何代码,但我已经被我的bug难住了

目前,我有一个已被malloced的数组,正在复制指向该数组的指针。现在,我可以用这个数组来实现memcpy和memmove,效果很好

然而,当我使用它执行realloc时,会出现一个无效指针错误——我完全不知道为什么


有人能帮忙吗

您说过“我将指向此数组的指针复制到另一个变量中”。问题是,只要执行realloc,原始指针就不再有效。我看不出将指针复制到变量的原因?

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

不能在数组上调用它。如果您有这样的
结构

struct foo {
    char a;
    int x[5];
    double z;
};
然后不能使用
realloc()
来增加
x
的大小。您必须改为使用完全动态分配:结构成员更改为指针:

struct foo {
    char a;
    int *x;
    double z;
};
…当您创建
struct
的实例时,调用
malloc()
进行初始分配:

struct foo f;

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

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

realloc
free
导致无效指针错误或segfault时,如果您确定正在传递从
malloc
获取的有效指针,那么很可能是您损坏了内存:您写入了
malloc
存储内存块簿记的区域。在您的情况下,这是一个
memcpy
memmove
调用


您可以使用内存错误检测器来帮助您查找此类错误。

仅当您显示
realloc
和朋友的代码时。添加一些代码。。。我们找不到问题所在。耶,把代码贴出来+1用于添加作业标签!您要将哪个指针复制到数组?是马洛塞德的指针吗?这不是指向数组本身的指针。如果你重新定位某个被malloce处理过的东西,数据的地址可能会移动。错误是在调用
realloc
期间还是之后发生的?这只是为了帮助我思考-我现在已经把它取出来,直接调用realloc到数组中-它仍然会崩溃,所以基本上你是void*ptr=malloc(100);void*next_ptr=realloc(ptr,200);你得到了无效的指针?我想说,除非你手边有调试器,否则在代码的各个点上打印出一些值。查看从malloc返回的值,然后查看传入realloc的内容。我想他们是不同的。在不同的点上查看变量的值,直到你缩小了改变它的行的范围。我在查看数组的内存地址,在该数组上执行memcpy,在该数组上执行realloc,它们完全相同,这与从malloc返回的内存地址相同。如果是这种情况,那么在数组的末尾可能有memcpy。仔细检查尺寸