指针赋不了值,求大神

qq_25681289 2015-11-16 08:05:34
如下,写了模拟链表的函数,若直接写insert(1),程序运行成功,但若int a=0;cin>>a;insert(a)则程序会崩溃,单步调试发现执行到showlist()中绿字处,无法给p赋值。求大神帮助!代码是助教上课当场写的,老师看了没问题,不知道为什么换了cin就会出粗,若直接insert(1)单步调试时指针能赋值。

#include <iostream>
using namespace std;

void showList();

struct Node{
int val;
Node* next;
};

struct Node* head = NULL;

//从小到大排序插入
void insert(int val){
Node* node = new Node;
node->val = val;
node->next= NULL;

if(!head){
head = node;
}else if(head->val > val){
node->next = head;
head = node;
}else{
Node* q = head->next;
while(q->next && q->next->val < val)
q = q->next;

node->next = q->next;
q->next = node;
}

showList();
}

void deleteNode(int val){
Node* p = head;

if(!head){
return;
}else if(head->val == val){
head = head->next;
delete p;
}else{
while(p->next && p->next->val != val)
p = p->next;

if(p->next){
Node* q = p->next;
p->next = p->next->next;
delete q;
}
}

showList();
}

void releaseList(){
while(head){
Node* p = head;
head = head->next;
delete p;
}
}

void showList(){
Node* p = head;
while(p){
cout << p << ", " << p->val << ", " << p->next << endl;
[color=#FFFF00] p = p->next;[/color]

}
cout << endl;
}

int main(){
int a=0;
cin>>a;
insert(a);
insert(3);

//直接下面可行,加入cin出错
/*
insert(4);
insert(3);
insert(6);
insert(5);

deleteNode(3);
deleteNode(5);
deleteNode(6);
deleteNode(7);
deleteNode(4);

releaseList();
*/
return 0;
}
...全文
172 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30409783 2015-12-06
  • 打赏
  • 举报
回复
楼主不厚道啊。帮你找问题,写代码,一点分都不给。
qq_25681289 2015-11-18
  • 打赏
  • 举报
回复
[quote=引用 7 楼 ID870177103 的回复:] Node* q = head->next; while(q->next && q->next->val < val) q = q->next; head->next==null的情况呢 这种问题用debugger一看就知道了吧,看代码的话的确很难看出问题[/quote 太感人了,就是这个原因呢,之前自己也想过head->next==null的情况,但是因为是助教写的代码就以为肯定正确,只从自己写的main里找原因....以后不管谁写的代码觉得有疑问一定要继续思考呀
赵4老师 2015-11-17
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
paschen 版主 2015-11-17
  • 打赏
  • 举报
回复
我帮你试了下,可以正常运行 你重新建一个工程试一下,如果还不行,贴出错误代码
ID870177103 2015-11-17
  • 打赏
  • 举报
回复
Node* q = head->next; while(q->next && q->next->val < val) q = q->next; head->next==null的情况呢 这种问题用debugger一看就知道了吧,看代码的话的确很难看出问题
qq_20515431 2015-11-17
  • 打赏
  • 举报
回复
输入的A是什么值?
looklzg1108 2015-11-17
  • 打赏
  • 举报
回复
VS2010用楼主一楼的代码运行,正常。
qq_30409783 2015-11-17
  • 打赏
  • 举报
回复
红色字体处的问题,代码如下: #include <iostream> using namespace std; void showList(); struct Node { int val; Node* next; }; struct Node* head = NULL; //从小到大排序插入 void insert(int val) { Node* node = new Node; node->val = val; node->next = NULL; if (!head) { head = node; } else if (head->val > val) { node->next = head; head = node; } else { Node* q = head; while (q->next && q->next->val < val) q = q->next; node->next = q->next; q->next = node; } showList(); } void deleteNode(int val) { Node* p = head; if (!head) { return; } else if (head->val == val) { head = head->next; delete p; } else { while (p->next && p->next->val != val) p = p->next; if (p->next) { Node* q = p->next; p->next = p->next->next; delete q; } } showList(); } void releaseList() { while (head) { Node* p = head; head = head->next; delete p; } } void showList() { Node* p = head; while (p) { cout << p << ", " << p->val << ", " << p->next << endl; p = p->next; } cout << endl; } int main() { int a = 0; cin >> a; insert(a); insert(3); //直接下面可行,加入cin出错 /* insert(4); insert(3); insert(6); insert(5); deleteNode(3); deleteNode(5); deleteNode(6); deleteNode(7); deleteNode(4); releaseList(); */ return 0; }
paschen 版主 2015-11-16
  • 打赏
  • 举报
回复
给个会崩的代码,我帮你看下
qq_25681289 2015-11-16
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
帮你main中的注释去了后我运行了下,没问题,代码没仔细看
我用vc6 vs2010 和mingw运行都绷了,.exe 中的 0x00ed156c 处有未经处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突
qq_25681289 2015-11-16
  • 打赏
  • 举报
回复
引用 2 楼 qq_25681289 的回复:
单步调试到 p = p->next 的时候会报这个错
这个时候p的地址是0X8A3098 P->NEXT是0x0,p = p->next 就是赋值不上去,然后报错
qq_25681289 2015-11-16
  • 打赏
  • 举报
回复


单步调试到 p = p->next 的时候会报这个错
paschen 版主 2015-11-16
  • 打赏
  • 举报
回复
帮你main中的注释去了后我运行了下,没问题,代码没仔细看

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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