【发布时间】:2018-08-27 15:01:17
【问题描述】:
我正在 Android 上开发一个手指绘画应用程序。我用 C++ 和卷页一起实现了这个手指画。手指画效果很好,但我想知道我的 undoPen 和 redoPen 方法是否存在内存泄漏。它必须使用原始指针来完成。我只添加了代码的有用部分。
vector<vector<*mPath>>MAIN(12);
vector<*mPath> undoMain(0);
int PageNo = 0;
void Pen::onFingerDown(float x1, float y1)
{
undoMain.clear();
MAIN[PageNo].push_back(move(path));
mx = x1;
my = y1;
tempPoints.x1=x1;
tempPoints.y1=y1;
tempPoints.x2=x1;
tempPoints.y2=y1;
// points.push_back(tempPoints);
path->addVert(tempPoints);
}
void Pen::onFingerMove(float x, float y)
{
tempPoints.x1=mx;
tempPoints.y1=my;
tempPoints.x2=x;
tempPoints.y2=y;
path->addVert(tempPoints);
// path->addColor(tempColors);
// points.push_back(tempPoints);
mx=x;
my=y;
//LOG_INFO("LOOOOOL");
}
void Pen::onFingerUp()
{
path = new mPath();
}
void Pen::undoPen()
{
if (MAIN[PageNo].size()>0) {
undoMain.push_back(move(*MAIN[PageNo].erase(MAIN[PageNo].end()-1)));
}
}
void Pen::redoPen()
{
if (undoMain.size()>0) {
MAIN[PageNo].push_back(move(*undoMain.erase(undoMain.end()-1)));
////
}
}
【问题讨论】:
-
这段代码能编译吗?
vector<vector<*mPath>>MAIN(12);语法无效。 -
在显示的代码中有 1 次调用
new和 0 次调用delete。所以你要么有泄漏,要么有更多我们需要查看的代码。 -
有很多工具可以发现内存泄漏。以valgrind 为例。
-
Yes NathanOliver 代码编译。理查德路径变量在类的解构函数中被删除我的主要问题是 undoPen 和 redoPen 方法是否存在内存泄漏。
标签: android c++ memory-leaks