【发布时间】:2016-08-03 14:17:02
【问题描述】:
尝试更改结构中的 int 成员时出现此错误:
`./resize' 中的错误: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;
}
我可以更改名称,但不能更改大小。怎么回事?
【问题讨论】:
-
您分配的数组有
i条目。这意味着ptr[i]超出范围。在有效范围之后仅写入一项可能会破坏系统分配的内部数据。从i = 0开始分配i + 1项。 (更好的是,一次分配所有五个项目。) -
@MOehm 天哪,我太笨了。谢谢!!但是为什么更改char *时没有错误?
-
无需自责,很多错误事后看来很愚蠢。至于你的问题:你不知道到底发生了什么,这是未定义的行为。 (这也是你应该学会在代码中发现这种未定义行为的原因。)
-
@MOehm 嗯,我明白了。再次感谢:)