C - 更改结构中的成员时出现重新分配错误

C - realloc error when changing member in struct

尝试更改结构中的 int 成员时出现此错误:

Error in `./resize': realloc(): invalid next size: 0x00000000006bc010 *** Aborted (core dumped)

我的代码是:

#include <stdlib.h>

typedef struct {
    char* name;
    int size;
} fich;

int main(){

    int i = 1;
    fich * ptr = NULL;

    while(i < 5){
         fich* newptr = realloc(ptr, i * sizeof(fich));
         if(newptr != NULL)
             ptr = newptr;
         else return 1;

         ptr[i].name = "stufs";
         ptr[i].size = 1;

         i++;
    }

return 0;
}

我可以更改名称,但不能更改大小。怎么回事?

在 C 中,数组从索引 0 开始。您使用 i=1 的第一次迭代为一个 fich 分配 space,即 ptr[0],而不是 ptr[1]

经典的逐一结合缓冲区溢出:-)