求大神指导双向循环链表问题【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个回答

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

 #define CreateNode(x) x = new BLPtr
#define DeleteNode(x) delete x
u014519726
意隨北雁雲飛去 我已经解决了,谢谢
5 年多之前 回复
u014519726
意隨北雁雲飛去 我自己又发现了一个错误,在新建链表时p1,没有移向新表尾,但我加上这句后,还是出现这个错误……
5 年多之前 回复
u014519726
意隨北雁雲飛去 还是不行………好像不是这里的错,我记得C++课本里delete的标准用法就是带[],不是数组可以省略
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问