Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++_Linked List - Fatal编程技术网

C++ 链表中的指针错误?

C++ 链表中的指针错误?,c++,linked-list,C++,Linked List,我想创建一个带有整数的链表,在每两个节点之间我想创建另一个节点,它是前一个节点和后一个节点之间的平均值 在我的add函数中,我不明白为什么我的p指针位于链表的最后一个元素而不是第一个元素。(这就是我认为它崩溃的原因) 多谢各位 #include<iostream> using namespace std; struct Nod{ int info; Nod* urm; }; void create(const int &a, Nod *&p, No

我想创建一个带有整数的链表,在每两个节点之间我想创建另一个节点,它是前一个节点和后一个节点之间的平均值

在我的add函数中,我不明白为什么我的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;
}
#包括
使用名称空间std;
结构节点{
国际信息;
Nod*urm;
};
无效创建(常量int&a、节点*&p、节点*&u)
{
if(p==NULL)
{
p=新节点;
p->info=a;
u=p;
}
其他的
{
Nod*q;
q=新节点;
q->info=a;
u->urm=q;
u=q;
}
u->urm=NULL;
}
无效打印(Nod*p)
{
while(p->urm)
{
cout-infourm;
}
计算机信息;
}
无效添加(节点*p)
{
while(p)
{
Nod*q;
q=新节点;
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;
查尔*努马尔;
numar=新字符[100];
库特>努马;
对于(int i=0;(无符号)i您需要添加

if(p->urm!=0)// this line
        q->info = (p->info + p->urm->info) / 2;
因为p->urm可以是
NULL


在添加建议行后,我在Visual Studio中进行了尝试,但效果良好。虽然我不知道添加两个地址会得到什么结果。

您到底得到了什么错误?在L3_P2.exe中的0x013C5A78处崩溃未经处理的异常:0xC0000005:访问冲突读取位置0x00000000。另外,因为他正在计算平均数据类型of信息应该是float@AshwaniDausodia可能是..但是他通过加上然后取平均值会得到什么呢。。