Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 试图用c+编写自己的链表实现+;,点击列表中的3个元素后,编码SEGFULTS_C++_Pointers - Fatal编程技术网

C++ 试图用c+编写自己的链表实现+;,点击列表中的3个元素后,编码SEGFULTS

C++ 试图用c+编写自己的链表实现+;,点击列表中的3个元素后,编码SEGFULTS,c++,pointers,C++,Pointers,我一直在尝试编写自己的链表实现,但是当我试图访问第三个元素或之后的任何元素时,代码会出错。添加元素不会出错,但访问会出错。我在get()函数中找不到指针错误 列表中的每个节点都存储(模板t的)数据和指向下一个节点的指针。我有两个函数,一个用于第一个元素,另一个用于任何后续元素。后续元素的get()函数总是segfaults。我在函数中有一些调试消息,这些消息会给出我无法解释的结果。例如,如果我对第二个元素(然后是第三个元素)运行get()请求,代码不会segfault,但它会返回明显不正确的结果

我一直在尝试编写自己的链表实现,但是当我试图访问第三个元素或之后的任何元素时,代码会出错。添加元素不会出错,但访问会出错。我在get()函数中找不到指针错误


列表中的每个节点都存储(模板t的)数据和指向下一个节点的指针。我有两个函数,一个用于第一个元素,另一个用于任何后续元素。后续元素的get()函数总是segfaults。我在函数中有一些调试消息,这些消息会给出我无法解释的结果。例如,如果我对第二个元素(然后是第三个元素)运行get()请求,代码不会segfault,但它会返回明显不正确的结果。我放置的调试消息指示当第二个元素调用函数检查第三个元素(如果发生)时发生segfault。尝试代码中的cout和cout行,您的主要问题之一是:

if(next == NULL){
    myLinkedList<T> newItem(input); // <<<<<<<<<<<<<
    next = &newItem;
    cout << "adding to list, data is " << input << ", pointer is " << next << endl;
}
if(next==NULL){

myLinkedList newItem(输入);//您的主要问题之一是:

if(next == NULL){
    myLinkedList<T> newItem(input); // <<<<<<<<<<<<<
    next = &newItem;
    cout << "adding to list, data is " << input << ", pointer is " << next << endl;
}
if(next==NULL){

myLinkedList newItem(input);//我有了一个突破!遵循Serge的解决方案是有帮助的,但还需要一个更改-而不是在add函数的else块中创建函数引用, 乙二醇


我不知道我的指针/对象语法

我有了一个突破!遵循Serge的解决方案很有帮助,但还需要一个更改-而不是在add函数的else块中创建函数引用, 乙二醇


在我看这篇文章之前,我不知道我的指针/对象语法

,我要指出两种解决链表问题的最佳方法。1)画出链表的样子。这通常会建议如何编写代码,当你有错误时,按照你的说明修改绘图。如果你发现自己在画一些东西g傻,你刚刚发现了一个bug。2)使用开发环境中随附的任何调试器。调试器允许你按照自己的条件执行程序。你可以用自己想要的任何粒度推进程序,并在执行过程中调查变量。如果你发现程序在做一些意想不到的事情,你就发现了一个bug(或者是你期望中的一个错误。你也需要修复它)。调试器是工作程序员的一个必不可少的工具。它们可能是编译器这方面的最佳生产力工具,因此你越早掌握它们,你就越早收获回报。
添加
myLinkedList newItem(输入)中的一个bug(可能是bug);
声明一个局部变量,这是一个自动分配,当它超出范围(程序到达封闭的大括号)时将被销毁。存储指向该节点的指针对您没有用处,因为指向的数据几乎立即消失,程序中只剩下一个悬空的指针。有趣的是,我找不到为每个新节点分配存储的位置?我是否缺少它?链表是否应该拥有它链接的对象(并管理它们的生命周期)还是不?在我看这个之前,我将指出两种解决链表问题的最佳方法。1)绘制列表的外观图片。这通常会建议如何编写代码,当您有错误时,请按照说明修改图形。如果您发现自己在绘制一些愚蠢的东西,您只是发现了一个错误。2)使用开发环境附带的任何调试器。调试器允许您在自己身上执行程序r术语。你可以用你想要的任何粒度推进程序,并在运行过程中调查变量。如果你发现程序做了一些意想不到的事情,你只会发现一个bug(或者你期望的错误。你也需要修复它).Debugger是程序员工作的必备工具。它们可能是编译器这一方面的最佳生产力工具,因此你越早掌握它们,你就越早收获回报。
add
myLinkedList newItem(input)中的bug(可能就是bug);
声明一个局部变量,这是一个自动分配,当它超出范围(程序到达封闭的大括号)时将被销毁。存储指向该节点的指针对您没有用处,因为指向的数据几乎立即消失,程序中只剩下一个悬空的指针。有趣的是,我找不到为每个新节点分配存储的位置?我是否缺少它?链表是否应该拥有它链接的对象(并管理它们的生命周期)是否?尝试使用new(myLinkedList newItem=new myLinkedList(input);)分配内存会导致一些令人费解的编译时错误LinkedListTest。cpp:15:33:错误:从“myLinkedList*”到“int”的转换无效[-fpermissive]基本上,在main中调用add函数会导致一些指针问题myLinkedList newItem=new myLinkedList(input);
myLinkedList*newItem=new myLinkedList(input);
--在这种情况下,您需要声明一个指针。尝试使用new(myLinkedList newItem=new myLinkedList(input);)分配内存导致一些令人费解的编译时错误LinkedListTest.cpp:15:33:错误:从“myLinkedList*”到“int”[-fpPermissive]的转换无效基本上,在main中调用add函数会导致一些指针问题myLinkedList newItem=new myLinkedList(输入);
myLinkedList*newItem=new myLinkedList(输入);
——在这种情况下,您需要声明一个指针。
 myLinkedList<T> nextEntry = *next;
 nextEntry.add(input)
next->add(input)