- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在链表中查找特定位置,然后能够访问其属性。我知道如何对链接列表进行排序,但我不知道如何访问 Locations 的名称属性。
我将 Location * 结构定义为(这些位置稍后存储到列表中):
#ifndef NESW_STRUCT
#define NESW_STRUCT
typedef struct location{
char *name;
char *longer;
char *shorter;
char *tip;
char *north;
char *south;
char *east;
char *west;
char *logic;
int visited;
char *items[20];
} Location;
#endif
我的导师为我们提供了一个模块来创建链表以及各种操作列表的函数。链表由 Node * 组成,我相信它包含 Locations 并指向列表中的下一个节点。
typedef struct node
{
Location *loc;
struct node *next;
} Node;
所以在我的游戏循环中,我创建了一个全局变量“world”,这是我的(我认为)位置的链接列表:
Node *world;
和
extern Node* world;
在其他也访问它的模块中。
然后我在我的 main 中运行一个简单的 while 循环,创建一个 Location 结构,然后将它连接到链接列表(从这篇文章中排除),world,使用 join(location,world) 和我的讲师提供的以下功能,由我修改以使用 Locations 而不是 void 对象。在加入第一个位置之前我没有将世界初始化为任何东西,我想我可能需要这样做,但是由于它是一个核心转储并且无论哪种方式都会崩溃,我无法判断它是否有所作为/是否有必要:
Node *
newNode(Location *place,Node *next)
{
Node *n = malloc(sizeof(Node));
if (n == 0)
{
fprintf(stderr,"newNode: out of memory!\n");
exit(1);
}
n->loc = place;
n->next = next;
return n;
}
Node *
join(Location *s,Node *rest)
{
return newNode(s,rest);
}
到目前为止一切正常,我成功创建了列表。然而,在我的程序的其他地方,我创建了一个函数,该函数通过世界列表进行映射,并找到与我传递给该函数的任何名称具有匹配名称的位置,从逻辑上讲,它可以正常工作。我创建了一个等于“world”的临时列表,然后将列表头部的名称属性与我正在寻找的位置的名称进行比较,使用 strcmp,如果匹配则返回该位置,并设置列表= 到列表的尾部,如果没有。
Head 和 Tail 在这里定义,在我的讲师的模块中再次提供:
Location *
head(Node *items)
{
return items->loc;
}
Node *
tail(Node *items)
{
return items->next;
}
如果我正确理解这些函数,使用 head(list) 应该返回一个 Location 吧,而不是一个指针?那么我应该可以只使用“location->name”来访问名称吗?显然不是……
为了节省运行所有游戏逻辑的时间,只需到达需要比较名称的部分,我尝试编写一些类似于映射函数中的临时代码,以测试从列出然后访问属性。
我用来尝试和测试访问列表的可能错误的代码是:
Location *test = 0; //creating an empty location, (not sure if it needs to be initialized to 0 before assigning the desired value but I think I remember a mention of that during class)
test = head(world); //I would like to believe this sets test equal to the location of the head of the list world, but I am fairly certain this is where my error occurs because what is getting assigned to test really isn't a location
printf("%s",test->name); //basic print of the name attribute, I know this works logically because I use it elsewhere when dealing with locations not accessed through world, however this is what causes the core dump because I think I'm trying to access a garbage value so to speak
程序编译没有错误,并根据我添加的调试打印语句成功读取了所有位置。非常欢迎任何帮助、建议或提示。我知道人们讨厌在这里发帖的 child ,因为他们认为他们正在努力免费完成他们的工作,但这只是沉浸式项目的一小部分,一旦我弄清楚这一点,游戏基本上就完成了,而不是内容。我正处于一个小障碍,这是一个主要的抑制因素,我已经尝试了我 friend 和我能想到的一切,甚至刚刚开始更改 Node 结构和 join/newNode 函数以及 Location 结构中的随机数据类型,希望要么走运或通过出现的不同错误消息找出解决方案,但正如您所猜到的,运气不佳。
最佳答案
OP 的解决方案。
因为每个新项目都加入到列表的前面,所以读入的最后一个节点(这是遍历列表时读取的第一个节点,因为列表是向后填充的)是空指针。
例子:因为使用的join函数存储了一个指向Location的指针,然后指向链表中的下一个Node,所以读入后链表反转。
假设您想将 alpha、bravo、charlie、delta epsilon 读取到列表中,并按此顺序读取它们,内存中的列表看起来像这样,null 是列表中的头部:
null<-epsilon<-delta<-charlie<-bravo<-alpha
因此,当我尝试使用
进行打印时Node *spot = world;
Location *loc = 0;
loc = head(spot);
printf("%s",loc->name);
我正在尝试打印位置的名称,它实际上只是一个空指针并且显然不存在......所以一个非常简单的解决方法是在实际使用任何节点之前将 spot 设置为等于尾部在列表中。
Node *spot = world;
Location *loc = 0;
spot = tail(spot);
loc = head(spot);
printf("%s",loc->name);
关于c - 访问存储在链表中的结构的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729013/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!