2014-11-25 128 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