小编Ale*_*eks的帖子

带有映射迭代器的坏访问内存

可能重复:
调用erase()后std :: map :: iterator出现问题

也许你可以用我目前遇到的问题来启发我.所以问题是当我试图擦除地图中的某些元素时,我得到了一个糟糕的访问内存.我们假设以下typedef:

typedef std::map < std::string *, Document *, pStringCompare > Map;
Run Code Online (Sandbox Code Playgroud)

我们假设在执行以下所有代码之前,我们已经实例化了一个包含两个元素的映射(例如).这段代码很棒:

Map::iterator it = documents.begin();

std::string *s = it->first;
Document *d = it->second;

documents.erase(it);

delete d;
delete s;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用迭代器循环时,我得到了错误.

for (Map::iterator it = documents.begin() ; it != documents.end() ; it++)
{
    std::string s = * ( it->first);
    Document dd = * (it->second);
    std::cout << s << " || " << dd;
    documents.erase(it);  // This line causes the bad access memory error.
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 …

c++ iterator map

2
推荐指数
1
解决办法
1255
查看次数

对齐自定义RelativeLayout的底部

让我们说我有一个自定义RelativeLayout覆盖onMeasure:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(200, 200);
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在此布局中添加一个与此Custom RelativeLayout底部对齐的视图.但我尝试了不同的事情,没有任何结果:

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
addView (mButton, paramsButton);
Run Code Online (Sandbox Code Playgroud)

我的第一个猜测是将底部与父对齐(应该是自定义RelativeLayout对吗?).但显然,它与我的自定义布局的父级对齐(这是另一个RelativeLayout,这次不是自定义.

所以我尝试与id对齐:

paramsButton.addRule(RelativeLayout.ALIGN_BOTTOM, getId());
addView (mButton, paramsButton);
Run Code Online (Sandbox Code Playgroud)

但它也没有工作(按钮消失)注意:我明确地设置我的自定义RelativeLayout的id来检查android确实得到了正确的id.

你知道怎么做这个工作吗?

编辑: 有趣的事情:它适用于以下规则

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
addView (mButton, paramsButton);
Run Code Online (Sandbox Code Playgroud)

所以我不得不说我真的不明白为什么

RelativeLayout.ALIGN_PARENT_BOTTOM

规则不起作用......

android android-custom-view relativelayout android-layout

0
推荐指数
1
解决办法
853
查看次数