【发布时间】:2014-06-15 12:55:39
【问题描述】:
我有一个四边形列表,它们有一个从 1 开始的标签。backpatch 采用指向某些四边形的列表结构。我想要更新这些四边形,将 z 放在 char * 第四位,然后清空 l 以便我以后可以放置其他四边形。我在 backpatch 的 strcpy 中得到 seg.fault 尽管我已经为 char * z 和 @987654325 分配了内存@。有人知道为什么会这样吗?
struct quad {
char *label; //5
char *first; //30
char *second;
char *third;
char *fourth;
struct quad *next;
};
struct list {
struct quad *quadlist;
struct list *nextlist;
};
void backpatch(struct list *l, char * z) {
struct list *temp = (struct list*) malloc(sizeof (struct list));
temp->nextlist = (struct list*) malloc(sizeof (struct list));
temp->quadlist = (struct quad*) malloc(sizeof (struct quad));
temp->quadlist->fourth = (char*)malloc(30 * sizeof (char));
l->nextlist = (struct list*) malloc(sizeof (struct list));
temp = l;
//z=(char*)malloc(sizeof(struct list))
while (temp->nextlist != NULL) {
strcpy(temp->quadlist->fourth, z);
temp = l->nextlist;
}
strcpy(temp->quadlist->fourth, z);
free(temp);
free(l);
}
即使我只保留了
while (l->nextlist != NULL) {
strcpy(l->quadlist->fourth, z);
l = l->nextlist;
}
strcpy(l->quadlist->fourth, z);
free(l);
部分,它也是 seg.fault...
【问题讨论】:
-
您是否仔细检查过
z指向的字符串不大于您分配的30 个字节。此外,您不应强制返回malloc,这是常见的错误来源。 -
valgrind可能会有所帮助。 -
确保
l已正确初始化。因为你在分配temp=l;之后在l工作 -
z 指向的字符串不大于 30 个字节(实际上是 5 个字节)...我不完全理解不强制返回 malloc 是什么意思:P
-
我没有强制转换 malloc 的返回值...SEG.FAULT .....:p
标签: c struct segmentation-fault strcpy