C - 更改struct中的成员时出现realloc错误

时间:2016-04-12 19:21:52

标签: c struct realloc

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

  <。>`./resize&#39;:realloc()出错:下一个大小无效:0x00000000006bc010 ***   中止(核心倾销)

我的代码是:

#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;
}

我可以改名,但不是大小。发生了什么事?

1 个答案:

答案 0 :(得分:1)

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

经典的off-by-one与缓冲区溢出相结合: - )