C++ 为什么我的内存占用在增长?
下面的示例使用了openFrameworks工具包,但我想我的错误不是openFrameworks特有的,所以我希望有人能提供帮助 我使用XthreadEdimageLoader动态加载图像。我使用另一个线程卸载/删除。我已经把我的问题浓缩成一段代码。在本例中,我不需要删除线程,但在我的实际程序中确实需要它,这就是它出现在这里的原因。(同样,如果我在主循环中而不是线程中删除,我不会遇到问题。使用线程,就像图像被复制到某个地方,只有一个副本被删除。) 更新是程序的主循环。以下是线程删除:C++ 为什么我的内存占用在增长?,c++,ios,memory-leaks,openframeworks,C++,Ios,Memory Leaks,Openframeworks,下面的示例使用了openFrameworks工具包,但我想我的错误不是openFrameworks特有的,所以我希望有人能提供帮助 我使用XthreadEdimageLoader动态加载图像。我使用另一个线程卸载/删除。我已经把我的问题浓缩成一段代码。在本例中,我不需要删除线程,但在我的实际程序中确实需要它,这就是它出现在这里的原因。(同样,如果我在主循环中而不是线程中删除,我不会遇到问题。使用线程,就像图像被复制到某个地方,只有一个副本被删除。) 更新是程序的主循环。以下是线程删除: clas
class threadedDelete : public ofxThread{
public:
deque<ofImage *> images_to_delete;
//--------------------------
threadedDelete() {
}
threadedDelete(ofImage* _imageToDelete){
lock();
images_to_delete.push_back(_imageToDelete);
unlock();
}
void addImageToDelete(ofImage* _imageToDelete) {
lock();
images_to_delete.push_back(_imageToDelete);
unlock();
}
void start(){
startThread(true, false); // blocking, verbose
}
void stop(){
stopThread();
}
//--------------------------
void threadedFunction(){
while(isThreadRunning()){
if (images_to_delete.size() > 0) {
lock();
ofImage * imageToDelete(images_to_delete.front());
ofLog(OF_LOG_NOTICE, "deleting " + ofToString(imageToDelete));
images_to_delete.pop_front();
delete imageToDelete;
unlock();
}
else {
ofSleepMillis(50);
}
}
}
};
类threadedDelete:xthread的公共{
公众:
删除要删除的图像;
//--------------------------
threadedDelete(){
}
线程删除(ofImage*_imageToDelete){
锁();
要删除的图像。向后推(\u imageToDelete);
解锁();
}
无效addImageToDelete(ofImage*_imageToDelete){
锁();
要删除的图像。向后推(\u imageToDelete);
解锁();
}
void start(){
startThread(true,false);//阻塞,详细
}
无效停止(){
止动螺纹();
}
//--------------------------
void threadedFunction(){
while(isThreadRunning()){
如果(图像到删除.size()>0){
锁();
ofImage*imageToDelete(images_to_delete.front());
ofLog(日志通知中,“删除”+ofToString(imageToDelete));
图片_to_delete.pop_front();
删除imageToDelete;
解锁();
}
否则{
睡眠质量指数(50);
}
}
}
};
所以基本上我只是加载一个随机图像,加载后,我删除它,然后加载另一个。即使每个新的图像都被删除,我的内存占用也会增加,直到我收到内存警告(iOS)并且我的应用程序崩溃。我错过了什么?
正如我所说的,我知道代码使用的是openFrameworks类,但我想我的错误是非常基本的,因此有人可能会根据这个代码段看到它。这就是创建它的原因。确保使用调试符号编译应用程序(例如,对于g++,-g
)并运行:
class threadedDelete : public ofxThread{
public:
deque<ofImage *> images_to_delete;
//--------------------------
threadedDelete() {
}
threadedDelete(ofImage* _imageToDelete){
lock();
images_to_delete.push_back(_imageToDelete);
unlock();
}
void addImageToDelete(ofImage* _imageToDelete) {
lock();
images_to_delete.push_back(_imageToDelete);
unlock();
}
void start(){
startThread(true, false); // blocking, verbose
}
void stop(){
stopThread();
}
//--------------------------
void threadedFunction(){
while(isThreadRunning()){
if (images_to_delete.size() > 0) {
lock();
ofImage * imageToDelete(images_to_delete.front());
ofLog(OF_LOG_NOTICE, "deleting " + ofToString(imageToDelete));
images_to_delete.pop_front();
delete imageToDelete;
unlock();
}
else {
ofSleepMillis(50);
}
}
}
};
valgrind --leak-check=full ./your_program --args --to --your program