2014-03-07 26 views
0

我有一个2d数组队列。二维数组的弹出队列

我想查看数组最顶端的元素。数组列表是类型为int **的队列。

int** target = arraylist.pop(); 

是正确的。然而,

for (int k = 0; k < cities; k++) 
    for (int m = 0; m < cities; m++) 
     if (targ[k][m] != 0) <----- segfault here 

这是我的首要功能:

template <class T> 

T Queue<T>::top() 
{ 
    return data[front]; 
} 

和我的队列被声明为

Queue<int**> arraylist; 

我知道INT **并不一定意味着INT [X] [Y ],但我很想知道为什么会出现这种情况,以及我可以如何将队列的最顶层条目设置为2d数组变量。

+0

你确定你没有超出界限,或者你的数组在第一时间被正确初始化了吗? – 2014-03-07 05:21:04

+0

我检查了k和m是否超出范围。他们不是。我初始化了我放入队列的2d数组和使用新的临时目标数组。 – carriwitchet

+0

我怀疑只有那4行代码才能确定地回答你的问题。请构建一个[**最小**,**完整**,测试和可读示例](http://stackoverflow.com/help/mcve)并发布。 – Dukeling

回答

0

虽然不在您粘贴的代码中,但我猜想您的Queue::push()的实现或您称为Queue::push()的地方会导致此问题。

您是否复制了您的数据实施Queue::push()

或者您复制一个指针并且指出的数据可能已经释放?或者更复杂的是,你多次推动同一个指针,其中一个已经被你弹出并释放?