复制我的链接列表中的问题

时间:2014-01-28 21:10:25

标签: c++ traversal

我的LLL问题与我有关。作为参考,这应该是一个具有指向主题标题结构的指针的类,然后该主题标题的结构具有指向特定于该主题的各个帖子的LLL的指针。我的问题在于函数的else部分,因为我可以通过初始部分来解决问题,并在该主题中应用注释。出于某种原因,正如我通过在我的代码中输入cout语句所发现的那样,无论我输入的任何值作为“发表评论”都会覆盖之前在初始点中的任何内容,并且只保留该值。

这对我来说可能是一个愚蠢的错误,但我已经看了很长一段时间,并且无法弄清楚我做了什么来实现这一点。我在其他之后立即发出了一个cout声明(如你所见),并输出最近输入的主题。

非常感谢任何见解!这里有说法:

int blog::enter(char new_topic[], char new_comment[])
 19 {
 20 
 21     post * new_post = new post;
 22     title * new_thread = new title;
 23     post * temp;
 24     temp = NULL;
 25     title * temp2;
 26     temp2 = NULL;
 27     if(!head)
 28     {
 29 
 30         temp2 = new_thread;
 31         new_thread -> topic = new_topic;
 32         temp2 -> next_topic = NULL;
 33         head = temp2;
 34 
 35         temp2 -> first_post = new_post;
 36         temp = new_post;
 37         temp -> comment = new_comment;
 38         temp -> next = NULL;
 39         return 1;
 40     }
 41     else
 42     {
 43         cout << head -> topic << endl;
 44         temp2 = head;
 45         while(head -> topic != new_topic)
 46         {
 47         cout << "While"<< endl;
 48             temp2 = temp2 -> next_topic;
 49             if(new_topic == temp2 -> topic)
 50             {
 51                 delete new_thread;
 52             }
 53         }
 54         if(!temp2)
 55         {
 56             temp2 = new_thread;
 57             cout << "TEMP2 NEW" << endl;
 58         }
 59         temp = temp2 -> first_post;
 60         cout << "NOLOOP" << endl;
 61 
 62         while(temp)
 63         {
 64             temp = temp -> next;
 65             cout << "WHILE2" << endl;
 66         }
 67 
 68         temp = new_post;
 69         temp -> comment = new_comment;
 70         temp -> next = NULL;
 71         new_post = temp;
 72 
 73 
 74         return 1;
 75     }
 76 }

我的头文件:

  3 #include <iostream>
  4 #include <cstring>
  5 #include <cctype>
  6 using namespace std;
  7 
  8 // stuct to hold the individual posts
  9 
 10 struct post
 11 {
 12 
 13     int rating;
 14     char * comment;
 15     post * next;
 16     post * tail;
 17 
 18 };
 19 
 20 // struct to hold each topic with a pointer to the list of posts underneath that topic
 21 struct title
 22 {
 23 
 24     char * topic;
 25     title * next_topic;
 26     post * first_post;
 27 };
 28 
 29 //class to hold the functions
 30 
 31 class blog
 32 {
 33 
 34     public:
 35 
 36         blog();
 37         ~blog();
 38         int enter(char new_topic[], char new_comment[]);
 39         int display(char new_topic[]);
 40         int display_all();
 41         int rate(char new_topic[], char new_keyword[], int new_rating);
 42         int remove(char new_topic[], char new_keyword[]);
 43 
 44     private:
 45 
 46         title * head;

1 个答案:

答案 0 :(得分:0)

我假设你的blog()构造函数将head初始化为NULL? 您将输入(..)指针传递给外部字符串,然后将这些指针保留在您的结构中。 原始字符串存储在哪里? 这个类不存储它们,它只保留指向它们的指针。如果您使用相同的缓冲区来输入主题和注释字符串,那么您有很多指向这些缓冲区的指针,这可能解释了覆盖。 此外,最好在结构中添加构造函数,并根据类型将成员初始化为NULL或无效值。这样你就不必担心主代码中的这一部分了。 如果你实际上没有将所有东西存储在一些外部容器中,我建议你修改你的结构并让它们可以存储数据,并在结构实例被销毁时删除它们。在这种情况下,更好的想法是使用std容器(如std :: string)进行字符串存储,使用std :: list来实现没有指针的线性列表。