【发布时间】:2011-07-13 04:32:04
【问题描述】:
我在 netbeans 中用 c++ 实现了一个 minmax 堆,但我得到了一个奇怪的错误。有人帮忙,谢谢! 语句 heap[0]=heap[length-1];得到一个段错误,但我可以访问 0 和 (length-1) 的元素。
int MinMaxHeap::deleteMin(){
assert(length>0);
int min= heap[0];
heap[0]=heap[length-1];
length--;
int id=0,gid=4*id+3;
while(gid<length){
int i,cmin=heap[gid],cmin_idx=gid;
for(i=0;i<4;i++){
if(gid>(length-1))
break;
if(heap[gid]<cmin){
cmin=heap[gid];
cmin_idx=gid;
}
gid++;
}
swap(heap[id],heap[cmin_idx]);
id=cmin_idx;
gid=4*id+3;
}
int sid1=2*id+1,sid2=sid1+1,cmin,cmin_idx;
if(sid1<length){
cmin=heap[sid1];
cmin_idx=sid1;
if(sid2<length){
if(heap[sid2]<heap[sid1]){
cmin=heap[sid2];
cmin_idx=sid2;
}
}
if(heap[id]>cmin)
swap(heap[id],heap[cmin_idx]);
}
return min;
}
类声明是:
class MinMaxHeap {
public:
MinMaxHeap(int size);
virtual ~MinMaxHeap();
int findMin();
int findMax();
int deleteMin();
int deleteMax();
bool insert(int x);
private:
int getLevel(int i); //get the level of the ith element
void swap(int&,int&);
int length; //current no. of elements of heap
int size; //heap size
int *heap; //the heap array
};
【问题讨论】:
-
你是
new还是malloc堆? -
这可能与
heap的初始化方式有关 - 我们可以看看你的构造函数代码吗? -
你在哪里分配
heap? -
@Ken Wayne VanderLinde
MinMaxHeap::MinMaxHeap(int size=10) { this->size=size; heap=new int[this->size]; this->length=0; } -
我们真的要看看你在做什么。此时长度为
0。哪里有变化?
标签: arrays netbeans dynamic segmentation-fault variable-assignment