意隨北雁雲飛去 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 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?