由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一小段程序,请诸位牛帮忙找下bug,谢谢!
相关主题
【我自己写的LinkedList为什么总有错?】二叉树最长路径 用 level order travel 做?
也问两个算法题delete a node in linked list
[合集] M$ interview question[C++]请问哪些变量在heap创建?
Depth-First-Search问道C内存的题?
问一个C++的binary search tree类实现问题 (转载)上个题大家给评评 (G家的)
大侠帮我看看这段程序两个月没做题了~~
面试时候C++ pop之前是空 大家怎么处理。。返回什么。。 假设stack 元素都是int形的。Quora 这家现在怎么样了?
拓扑排序Interview question::
相关话题的讨论汇总
话题: node话题: stack话题: head话题: class话题: pop
进入JobHunting版参与讨论
1 (共1页)
s****A
发帖数: 80
1
用linked list实现stack, 这个pop函数 segmentation fault了
template T stack::pop(){
T d=head->data;
node *s=head;
head=head->next;
delete s;
ind--;
return d;
}
node和stack class的定义如下:
template struct node{
node *next;
T data;
node(node* n, T d):next(n),data(d){};
};
template class stack{
public: node *head;
int ind;
stack();
~stack();
void push(T d);
T pop();
bool isEmpty();
};
A*****i
发帖数: 3587
2
head没有new,没有null检查
s****A
发帖数: 80
3
head是在每次push一个数据进来的时候new的
template void stack::push(T d){
if(ind==MAXSIZE) {std::cout<<"STACK OVERFLOW!!"< node *t=new node (head, d);
head=t;
ind++;
}
现在不是在stack为空的情况下出现segmentation fault的
所以主要的bug应该是除了null检查之外的

【在 A*****i 的大作中提到】
: head没有new,没有null检查
l*********o
发帖数: 3091
4
s 都 delete 了。d 也就不存在了。

【在 s****A 的大作中提到】
: 用linked list实现stack, 这个pop函数 segmentation fault了
: template T stack::pop(){
: T d=head->data;
: node *s=head;
: head=head->next;
: delete s;
: ind--;
: return d;
: }
: node和stack class的定义如下:

s****A
发帖数: 80
5
难道在刚开始 T d=head->data;的时候
不是已经把值赋给d了吗?
这又不是reference
为什么delete s了,d就不存在了呢?

【在 l*********o 的大作中提到】
: s 都 delete 了。d 也就不存在了。
t****t
发帖数: 387
6
Stack class 里面的*head没有Initialize, 应该是Null
push以后head指向新生成的node
node *s=head;
head=head->next;
delete s;
pop之后s指向原来那个没有Initialized pointer
delete s seg fault不奇怪
s****A
发帖数: 80
7
但是segmentation fault不是发生在pop stack最后一个数据(bottom)的时候
而是发生在stack里面有不少数据,pop第一个数据(top)的时候

【在 t****t 的大作中提到】
: Stack class 里面的*head没有Initialize, 应该是Null
: push以后head指向新生成的node
: node *s=head;
: head=head->next;
: delete s;
: pop之后s指向原来那个没有Initialized pointer
: delete s seg fault不奇怪

l*****s
发帖数: 774
8
能把整段程序发上来吗?



【在 s****A 的大作中提到】
: 用linked list实现stack, 这个pop函数 segmentation fault了
: template T stack::pop(){
: T d=head->data;
: node *s=head;
: head=head->next;
: delete s;
: ind--;
: return d;
: }
: node和stack class的定义如下:

t****t
发帖数: 387
9
这段程序我可以运行没问题
如果再pop一次就crash
template struct node{
node *next;
T data;
node(node* n, T d):next(n),data(d){};
};
template class stack{
public:
node *head;
int ind;
stack(){}
~stack(){}
void push(T d);
T pop();
bool isEmpty();
};
template T stack::pop(){
T d=head->data;
node *s=head;
head=head->next;
delete s;
ind--;
return d;
}
template void stack::push(T d){
if(ind==10) {std::cout<<"STACK OVERFLOW!!"< node *t=new node (head, d);
head=t;
ind++;
}
int main()
{
stack a;
a.push("abc");
a.push("edf");
std::cout< std::cout< return 0;
}

【在 s****A 的大作中提到】
: 但是segmentation fault不是发生在pop stack最后一个数据(bottom)的时候
: 而是发生在stack里面有不少数据,pop第一个数据(top)的时候

g*******d
发帖数: 495
10
上gdb调试一下就好了嘛
R********n
发帖数: 19
11
head=head->next;
程序里面两次push,第二次pop的时候,上面一句已经把head赋值NULL了(程序里开始
没把head赋值NULL,所以严格来说是uninitialized),第三次pop,T d=head->data
就出问题了。
1 (共1页)
进入JobHunting版参与讨论
相关主题
Interview question::问一个C++的binary search tree类实现问题 (转载)
这个Binary Tree的题来看看大侠帮我看看这段程序
问个题,用递归方法面试时候C++ pop之前是空 大家怎么处理。。返回什么。。 假设stack 元素都是int形的。
问个问题post order traveral using interation拓扑排序
【我自己写的LinkedList为什么总有错?】二叉树最长路径 用 level order travel 做?
也问两个算法题delete a node in linked list
[合集] M$ interview question[C++]请问哪些变量在heap创建?
Depth-First-Search问道C内存的题?
相关话题的讨论汇总
话题: node话题: stack话题: head话题: class话题: pop