2014-11-25 101 views
0

我想用integeres创建一个链表,并在每个两个节点之间创建另一个节点,它是前一个节点和后一个节点之间的平均值。链接列表中的指针错误?

在我添加功能我不明白为什么我的p指针在链表中的,而不是在第一次的最后一个元素。 (这就是我认为它崩溃的原因)。

谢谢。

#include<iostream> 
using namespace std; 

struct Nod{ 
    int info; 
    Nod* urm; 
}; 

void create(const int &a, Nod *&p, Nod *&u) 
{ 
    if (p == NULL) 
    { 
     p = new Nod; 
     p->info = a; 
     u = p; 
    } 
    else 
    { 
     Nod *q; 
     q = new Nod; 
     q->info = a; 
     u->urm = q; 
     u = q; 
    } 
    u->urm = NULL; 
} 

void print(Nod *p) 
{ 
    while (p->urm) 
    { 
     cout << p->info<<" -> "; 
     p = p->urm; 
    } 
    cout << p->info; 
} 

void add(Nod *p) 
{ 
    while (p) 
    { 
     Nod *q; 
     q = new Nod; 
     q->info = (p->info + p->urm->info)/2; 
     q->urm = p->urm; 
     p->urm = q; 
     p = p->urm->urm; 
    } 
} 

int main() 
{ 
    Nod *p, *u; 
    p = u = NULL; 

    char *numar; 
    numar = new char[100]; 
    cout << "Enter a number: "; cin >> numar; 
    for (int i = 0; (unsigned)i <= strlen(numar) - 1; i++) 
     create(numar[i] - '0', p, u); 
    add(p); 
    print(p); 

    system("Pause"); 
    return 0; 
} 
+0

你正在得到什么错误? – 2014-11-25 05:32:35

+0

崩溃L3_P2.exe中的0x013C5A78处未处理的异常:0xC0000005:访问冲突读取位置0x00000000。 – Stefan 2014-11-25 05:34:34

回答

1

您需要添加,

​​

由于P-> URM可能是NULL

我尝试在Visual Studio中添加建议的行后,它工作正常。虽然我不明白你会通过添加两个地址获得什么。

+0

另外,因为他计算的平均数据类型的信息应该是浮动 – 2014-11-25 05:43:55

+0

@AshwaniDausodia可能是..但他会得到通过添加,然后通过平均.. – 2014-11-25 05:45:12