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

标签 c struct realloc

尝试更改结构中的 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 分配空间,即 ptr[0],而不是 ptr[1].

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

关于C - 更改结构中的成员时出现重新分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582238/

相关文章:

c - OpenMP 并行区域的不同运行时间

c++ - 在 C++ 中将定义的结构转换为 double (复数)

c - realloc:无效的下一个大小和 malloc:内存损坏(快速)

c - 与 realloc : Invalid next size 相关的 Glibc 错误

c++ - union 和 struct 的字节大小

C realloc不改变字符数组的表观大小

c - 对大型 double 据进行除法时得到错误结果

c - 如何检查字符串是否可以转换为 float ?

c - 为什么这个 C 语言的 Fizzbuzz 程序不能工作?

go - 如何将任何结构作为参数发送给方法并返回结构?