C ++数据结构输出错误(链表)

时间:2015-09-16 20:42:43

标签: c++ data-structures linked-list

#include <iostream>
#include <cstdlib>

using namespace std;

typedef struct node{
    int size;
    char* name;
    node* next;
}node;

void insertnodes( node** arrayhead , int index , node* ptr){

    index = index - 1 ;
    while ( index--){

        *arrayhead = (*arrayhead)->next;
    }
    (*arrayhead)->next = new node; 
    (*arrayhead)->next = ptr;   
}


int main(){
    int n = 4;
    node *A[n] ;

    for ( int i = 0 ; i < n ; i++){
        A[i] = NULL ;
    }

    A[0] = new node; 

    A[0]->size = 10;
    A[0]->name = new char;
    A[0]->name = "gunna";
    A[0]->next = NULL;
    //cout << A[0]->name << endl;


    node* ptr = new node ;
    ptr->size = 10;
    ptr->name = new char;
    ptr->name = "param";
    ptr->next = NULL;


    insertnodes(&A[0] , 1 , ptr);

    node* ptrr = new node ;
    ptrr->size = 10;
    ptrr->name = new char;
    ptrr->name = "sidd";
    ptrr->next = NULL;
    insertnodes(&A[0] , 2 , ptrr);

    cout << A[0]->name << endl;
    cout << A[0]->next->name;



}

它应该打印“gunna”和“param”。

但它将“param”和“sidd”作为输出。

我不知道我哪里出错了。我尝试了很多东西,但我仍然感到困惑 请帮忙...... 我正在使用代码块来编译这个程序..

1 个答案:

答案 0 :(得分:0)

在你的insertnodes()中你传递的是双指针 node** arrayhead,因此,稍后通过去除它,你将覆盖next指针的当前值,这将导致程序中的内存泄漏。

您应该做的是创建一个临时变量node* tmp,当index减少时,您将更改该临时变量next。然后,您不需要为下一个指针分配新节点,因为您已经有一个指针要添加到void insertnodes(node** arrayhead, int index, node* ptr) { index = index - 1; node* tmp = *arrayhead; while (index--) { tmp = tmp->next; } tmp->next = ptr; }

固定代码如下所示:

int n = 4;
node *A[n] ;

for ( int i = 0 ; i < n ; i++){
    A[i] = NULL ;
}

编辑:这完全没用:

head

创建链表所需的只是一个节点(例如列表的头部)。

但由于这是一个链表,你不需要真正传递索引。您所需要的只是一个node->next,您可以在其上进行迭代,直到找到NULLEclipse - 这就是您需要插入新节点的地方(这就是它的方式) #39;通常已完成。)