【发布时间】:2015-04-19 02:23:00
【问题描述】:
修复:我没有将位置保存回世界,所以我只是泄露了信息。感谢 Skeeto。
while(!feof(fp)){
loc = readLocation(fp);
join(loc,world);
}
应该是
while(!feof(fp)){
loc = readLocation(fp);
world = join(loc,world);
}
编辑:正如 cmets 中所述,是的,我是一名学生,但我不是在找人为我工作。我只是想找出可能的逻辑错误,因为如果我能正确填写这个列表,我可以很容易地完成我的项目。这只是一个非常身临其境的项目的一小部分,帮助这个项目只会让我继续这个项目,而不是完成它并把它上交。我只提供了这么多的细节,因为 1)我以前从未在这里发布过所以没有'不知道更好,2)希望读者了解其工作原理,以帮助他们帮助我。此外,对于 Skype 的任何担忧,如果最终获得成功的帮助,我将在此“编辑”上方提供修复,并感谢 stackoverflow 用户的帮助。
TLDR:是的,我是一名学生,不,我不想让别人做我的项目。这是一个很小的部分,只会让我继续,而不是完整。如果通过 Skype 提供帮助,我将使用修复程序更新此帖子并感谢帮助者。
您好,提前感谢您的帮助。
我正在尝试创建一个包含 Location * 类型对象的链接列表。 我将位置定义为
typedef struct location{
char *name;
char *longer;
char *shorter;
char *north;
char *south;
char *east;
char *west;
char *logic;
int visited;
char *items[20];
} Location;
此外,我可以成功读取位置的所有值并显示所有属性,因此这不是问题。
在我的游戏(主)的“引擎”中,我尝试将所有位置读入列表中,如下所示(我确定 readLocation 工作正常,因为我将打印语句放入循环打印使用 loc 变量的位置名称)
world = 0;
FILE *fp = fopen("world.in","r");
char *garb = readToken(fp);
free(garb); //garbage token at begging of world.in just to check file exists
int count = 0; //used later, ignore for now
while(!feof(fp)){
loc = readLocation(fp);
join(loc,world);
}
world 是声明为 Node * 并初始化为 0 的全局变量(我认为我需要这样做,但不确定)
在 olist.h 中,我将节点结构创建为
typedef struct node
{
Location *place;
struct node *next;
} Node;
在 olist.c 中,这就是我构建节点以及连接节点的方式
//place is the attribute of the Node that holds the location and next points to the next Node in the list
Node *newNode(Location *loc,Node *next)
{
Node *n = malloc(sizeof(Node));
if (n == 0)
{
fprintf(stderr,"newNode: out of memory!\n");
exit(1);
}
n->place = loc;
n->next = next;
return n;
}
//s is the location i wish to join to the list and rest is list I'm joining to
Node *join(void *s,Node *rest)
{
return newNode(s,rest);
}
不幸的是,在所有位置成功读取后,世界仍然是一个空列表。感谢您的帮助,我很乐意通过此论坛或 Skype 提供更多信息:F3V3Rz_MoDz(这是一个非常古老的名称)
【问题讨论】:
-
请避免使用 Skype,以便其他人可以从您在此过程中得到的任何答案中受益。
-
他们提出这个问题的方式,听起来很像一个学生要求 StackOverflow 为他做作业。如果您的问题更具体,并且其答案可能对他人和您自己都有益,那么您可能会取得更大的成功。
-
看起来
newNode有内存泄漏。 -
编译器应该至少对
if ( n == 0 )部分给出警告。在 C 语言中,您应该使用NULL; 0 在 C++ 中使用(无论出于何种原因,这已成为标准)。 -
@Cubia:那将是 C++。在 C 中,它是 (void *)0。 C++ 用户的常见错误。我总是想知道为什么在 C++ 中改变了这一点。我实际上更喜欢将指针与指针进行比较,而不是整数(是的,我知道 C++ 中是如何定义的)
标签: c dictionary linked-list nodes game-engine