VS2013 链表插入操作 无法读取内存

amber_H 2015-04-06 03:16:43
工程中共有三个文件
List.h 文件

class Node{
public:
char data;
Node *pred;
Node *succ;

Node(){}
Node(char const& e, Node *p=NULL, Node *q=NULL){ data = e; pred = p; succ = q; }
~Node(){}
};

class List{
public:
Node *header;
Node *trailer;

int _size;

List();
~List(){}

int size()const;

Node * insertAsPred(int n, char const& letter);

char remove(int n);

void traverse()const;

};

List.cpp 文件

#include"List.h"
#include<stdio.h>

List::List(){
Node *header = new Node;
Node *trailer = new Node;

header->succ = trailer;
header->pred = NULL;
trailer->pred = header;
trailer->succ = NULL;

_size = 0;
}

int List::size()const{
return _size;
}

Node * List::insertAsPred(int n, char const& letter){
Node *flag;
flag = header->succ;
int times = n;
while (0<times){
flag = flag->succ;
times--;
}
Node* newNode = new Node(letter, flag->pred, flag);
flag->pred->succ = newNode;
flag->pred = newNode;
_size++;

return newNode;
}


char List::remove(int n){
Node *flag;
flag = header->succ;
int times = n;
while (0<times){
flag = flag->succ;
times--;
}
flag->pred->succ = flag->succ;
flag->succ->pred = flag->pred;
char dataTemp = flag->data;
delete flag;
return dataTemp;
}

void List::traverse()const{
Node* newNode = header->succ;
while (newNode!=trailer){
printf("%c ", newNode->data);
}
}

main.cpp 文件
#include"List.h"
#include<stdio.h>

int main(){
List *testList = new List();
testList->insertAsPred(0, 'A');
return 0;
}

程序运行到"flag = header->succ;"中止,
变量信息如下


恳请指教!拜托各位了。
...全文
1977 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
amber_H 2015-04-06
  • 打赏
  • 举报
回复
引用 7 楼 jiht594 的回复:
[quote=引用 5 楼 amber_H 的回复:] [quote=引用 2 楼 jiht594 的回复:] Node *header = new Node; Node *trailer = new Node; ====>> header = new Node; trailer = new Node;
不好意思,看的不是很明白 您的意思是将"Node *header = new Node;"改为"header = new Node;"吗?[/quote] 是 insertAsPred里面的header是成员变量, 但是你构造函数根本没有给header赋值, 而是创建了一个新变量[/quote] 解决了,多谢您!
jiht594 2015-04-06
  • 打赏
  • 举报
回复
引用 5 楼 amber_H 的回复:
[quote=引用 2 楼 jiht594 的回复:] Node *header = new Node; Node *trailer = new Node; ====>> header = new Node; trailer = new Node;
不好意思,看的不是很明白 您的意思是将"Node *header = new Node;"改为"header = new Node;"吗?[/quote] 是 insertAsPred里面的header是成员变量, 但是你构造函数根本没有给header赋值, 而是创建了一个新变量
amber_H 2015-04-06
  • 打赏
  • 举报
回复
引用 4 楼 focuslight 的回复:
Node *flag; flag = header->succ; 这里 有错误 未初始化List
谢谢您,因为初学对您说的问题不是很理解。 能否麻烦你说详细一些,拜托了。
amber_H 2015-04-06
  • 打赏
  • 举报
回复
引用 2 楼 jiht594 的回复:
Node *header = new Node; Node *trailer = new Node; ====>> header = new Node; trailer = new Node;
不好意思,看的不是很明白 您的意思是将"Node *header = new Node;"改为"header = new Node;"吗?
Arnis1973 2015-04-06
  • 打赏
  • 举报
回复
Node *flag; flag = header->succ; 这里 有错误 未初始化List
amber_H 2015-04-06
  • 打赏
  • 举报
回复
引用 1 楼 FightForProgrammer 的回复:
header此时已经无效了。 设置断点调试。用纸画出指针的指向,肯定可以解决的
我的想法是建立了testList这个指针,然后用testList这个指针通过"->"调用插入函数时,函数中的header应该就是testList这个指针对应的链表的header吧?为什么会无效呢? 不好意思,初学问题比较小白。请见谅 ^_^
jiht594 2015-04-06
  • 打赏
  • 举报
回复
Node *header = new Node; Node *trailer = new Node; ====>> header = new Node; trailer = new Node;
FightForProgrammer 2015-04-06
  • 打赏
  • 举报
回复
header此时已经无效了。 设置断点调试。用纸画出指针的指向,肯定可以解决的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧