- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
编辑: 我也不介意知道这是否过于模棱两可以至于您无法理解或发现问题所在,我个人知道与代码没有直接关系,因为更改发生在我即将退出函数时……而不是在实际“代码”期间。所以我希望这就足够了,无论如何我会在需要时添加更多。提前致谢!
我正在尝试制作一个简单的(单向)链表,我必须自己制作,而不是使用 STL 或任何其他已经制作好的动态容器。我做了一个简单的,但我似乎遇到了一个问题,我根本无法解决这个问题。
每当我在列表中创建一个新节点时(我总是返回列表的第一个节点以防它被更改,我不使用“哨兵”或“虚拟”节点)新节点是好的直到当程序自行重置到我引入的第一个节点时,我到达了程序中的某个点。
为了尽可能保持我的帖子简洁,我将插入更少的代码和更多的“功能”或模式,但如果这还不够,我会添加更多。
这是它的工作原理:
我的节点项目
struct Node { // simplified example
string type; //can be ignored
int ap_nr; // I sort by apartment number
int sum; // can also be ignored
Node *next;
};
在 main 中,我将我的第一个节点初始化为“假”节点(ap_nr = -1,其他 ap_nr 不能为负)。
int main ()
{
int command = 1; // used for loop
Node *begin; // head of my list
begin = new Node;
begin = create_node(); // initialize
while (command != 0) // This is for work with a "handler", accesses different mechanics of the program, I don't know exactly how to explain in english
{
input_command(command, begin); // reads command, sends result to handler
}
return 0;
}
这是我的输入命令:
void input_command (int &command,Node *begin)
{
cout<<"Option #"; cin>>command;
input_validation (command, begin);
}
我处理程序中唯一使用 atm 的部分:
void input_validation (int command, Node *begin)
{
if (command == 1 trough 15) // pseudo code
execute (command)
}
在我向列表中添加一个节点后,我使用调试来跟踪它,第一个保持原样,但是第二个节点(我在第一个节点之前添加它并返回新的“开始”),在首先它没问题(有一个新的内存位置和 new_begin->next = old_begin
但在我退出 ìnput_command
结构后它会重置)
*这里是input_command结构和程序图:*
主要内容: - 初始化“假”节点/进入菜单循环 -> 转到 input_command。
UI: - 输入命令 -> 读取命令 -> 验证 -> 发送给处理程序。
列表: - 将期望节点添加到“列表”(实际上没有列表本身,只有链接节点)-> 返回第一个节点。第一个节点没问题(有新地址,指向旧节点)
返回UI:->输入命令(下括号)和resets(我的意思是无论我添加什么节点,它都会成为第一个我添加的节点。假设我介绍公寓 1 到 10,它只记得“1”)。
我错过了什么吗?我的设计有逻辑错误吗?您需要更多代码来评估吗?告诉我要添加什么,我意识到这有点模棱两可。
注意:现在我只能在我的主节点之前添加节点,我不会关注任何新的东西,直到我让它正常工作,只要我的设计不是问题的一部分,我也不会改变它,但如果它不好,我会很感激注释和建议。
这是 add_node 函数唯一实现的部分:
Node *add_node (Node *begin,string type, int sum, int ap_nr) // Node begin e primul nod din lista, trebuie mereu plimbat cu toate functiile pe lista
{
// if first node is dummy node
if (begin->ap_nr == -1)
{
begin->type = type;
begin->ap_nr = ap_nr;
begin->sum = sum;
begin->next = 0;
return begin;
}
// else create new node and insert it in sorted position
else
{
// if node should be inserted before first node (begin)
if (ap_nr <begin->ap_nr)
{
Node *cursor;
cursor = new Node;
cursor->ap_nr = ap_nr;
cursor->type = type;
cursor->sum = sum;
cursor->next = begin;
return cursor;
}
}
最佳答案
正如 RStrad 所说,您遇到的问题是您想要修改函数中的指针,并让这些修改也保留在该函数之外。
在 C/C++ 中,一切都是按值传递的。如果你想让一个函数改变一些东西,你需要传递一个指向那个东西的指针。所以如果你想改变一个指针,你需要传递一个指向那个指针的指针,像这样:
*Node begin;
input_command(command, &begin);
// the pointer itself has an address, which you are sending with &
input_command()
的定义将是:
void input_command (int &command, Node **begin)
// observe here the pointer to your pointer
在 input_command()
中,您对 input_validation
的调用必须是:
input_validation (command, &(*begin));
// the address of the pointer towards which **begin points
input_validation()
的定义将是:
void input_validation (int command, Node **begin)
...以及任何进一步的调用,例如对实际添加节点的函数的调用,将继续遵循此格式。简而言之,如果您有一个指针 *P
并且您想要在函数中修改它,您需要发送它的地址 &P
。该函数将接收指向指针 **P
的指针,任何包含 P 地址的进一步调用都必须使用 &(*P)
完成。
关于c++ - 指针似乎无缘无故地重新设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9976004/
我正在安装这个程序:THERMUS ,据我所知应该安装正常。我/我通过 ubuntu 控制台安装这个程序。但是当我运行 make all 时,我收到了这条消息: make: ***No rule to
我正在渲染一个简单的 sass 文件并收到以下警告: This selector doesn't have any properties and won't be rendered. ╷ 14
我不明白为什么文本不会与 div 的中间对齐,我认为这是导致页面底部出现空白的原因,我希望文本位于中间(高度)页脚的(两个 div 我都有两个强制文本的每个部分到页面的边缘) HTML:
我正在尝试为 android 创建基本的音乐播放器。对我来说一切似乎都很好,但是当我试图在我的手机上运行应用程序时。它说它停止了。我无法解决那个问题。感谢您的任何帮助。我试图在应用程序停止时查看“Lo
在我的 LoginProvider 中,我使用了一个函数来执行登录并将创建的 session 作为 promise 返回。 @Injectable() export class LoginProvid
我在 Google Cloud Platform 上运行 Dataflow-Jobs,我收到的一个新错误是“Workflow failed”,没有任何解释。我得到的日志如下: 2017-08-25
我已经阅读了无数关于这个错误的主题,但是没有一个和我有同样的问题。 我得到了 E/MediaPlayer: 错误 (-19, 0) E/MediaPlayer: 错误 (-19,0) 错误,然而,音乐
这个错误或我缺乏知识或其他东西真的开始困扰我。我正在开发一个 Grails 应用程序,并且在我的工作过程中随机出现 Grails 提示一些导入,说无法解析类名。它在一个保存前工作!我没有对项目的基础设
我为此失去了头发!我不断收到“发送后无法设置 header ”错误,我确定我没有像在其他问题中看到的那样调用 Next()。我的代码一直在工作,直到我尝试进行一些重构,我没有改变这个类的任何东西,所以
我是一名优秀的程序员,十分优秀!