意隨北雁雲飛去 2015-03-25 12:34 采纳率: 0%
浏览 1763

求大神指导双向循环链表问题【0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突】

小弟欲新建一双向循环链表,对链表中符合删除条件的数据进行删除操作。整个程序编译无bug,运行中断。主函数运行到新建链表后打印函数中的cout<data<<" ";VS2010显示的错误为“0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突”,求大神指教,是否是我新建链表的函数或宏定义中new和delete函数使用错误,还是我新建双向循环链表的算法有问题啊,望不吝赐教!!!
以下是部分代码,包含新建函数和打印函数:
#include

#define CreateNode(x) x = new BLPtr
#define DeleteNode(x) delete []x

using namespace std;

struct BLPtr
{
char data;
struct BLPtr *prior;
struct BLPtr *next;
};

struct BLPtr *creat(void);
void print(struct BLPtr *p);
bool beErased(char);
//struct BLPtr erase(struct BLPtr *p);
int erase(struct BLPtr *p);

int main()
{
struct BLPtr *p;
p = creat();
cout<<"原始链表数据为:"<<endl;
print(p);
erase(p);
cout<<"处理后链表数据为:"<<endl;
print(p);
return 0;
}

struct BLPtr *creat(void)
{//建立一个无附加头结点的双向循环链表
struct BLPtr *head,*p1,*p2;
head = p1 = CreateNode(p2);//新建第一个结点
cout<<"请输入第一个结点数据:";
cin>>p2->data;//输入第一个结点数据
while(p2->data != '#')//输入“#”结束
{
p2->prior = p1;//后方前驱指针指向前方结点
p1->next = p2;//前方后继指针指向后方结点
CreateNode(p2);//新建结点
cout<<"请继续输入:";
cin>>p2->data;//输入新节点数据
}
head->prior = p1;//头结点前驱指针指向尾结点
p1->next = head;//尾结点后继指针指向头结点
head = p2;//删除最后无用结点和指针
DeleteNode(p2);
return p1;
}
void print(struct BLPtr *p)
{
struct BLPtr *pn;
pn = p->next;
while(pn != p)//输出除p以外的结点数据
{
cout<data<<" ";//运行中断,求指教
pn = pn->next;//沿next向下搜索
}
cout<data<<endl;//输出最后一个结点数据
}

  • 写回答

1条回答

  • 91program 博客专家认证 2015-03-25 12:43
    关注

    new 与 delete 配对,不用 [] 试试。

     #define CreateNode(x) x = new BLPtr
    #define DeleteNode(x) delete x
    
    评论

报告相同问题?

悬赏问题

  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch