尝试更改结构中的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;
}
我可以改名,但不是大小。发生了什么事?
答案 0 :(得分:1)
在C中,数组从索引0开始。i=1
的第一次迭代为一个fich分配空间,即ptr[0]
,而不是ptr[1]
。
经典的off-by-one与缓冲区溢出相结合: - )