我正在为哈希表编写一个Insert函数,我需要在该函数中创建一个键值对(struct Item)。我发现如果我在堆栈上创建它,例如private boolean isAnimCompleted(){ // you need to check animation is completed some how
boolean completed = false;
.
.
return completed;
}
public void startAnimManually(){
final Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
private Runnable thisRunnable = this;
@Override
public void run() {
view.invalidate();
if (!isAnimCompleted()){
handler.post(thisRunnable);
}
}
});
}
,然后每当我调用Insert时,将在堆栈的同一位置创建不同的键值对。如果我使用堆分配内存,则不会发生这种情况。为什么他们在堆栈上的同一位置?
以下是我的示例代码:
Item item(key, value);
}
Item2是堆栈分配,我使用它的方式是在评论中。
答案 0 :(得分:2)
堆栈分配版本不起作用,因为您存储了一个指向局部变量的指针,该局部变量后来超出了作用域。您将指针保留在对象本身的生命周期之外。