C++ 为什么我的内存占用在增长?

C++ 为什么我的内存占用在增长?,c++,ios,memory-leaks,openframeworks,C++,Ios,Memory Leaks,Openframeworks,下面的示例使用了openFrameworks工具包,但我想我的错误不是openFrameworks特有的,所以我希望有人能提供帮助 我使用XthreadEdimageLoader动态加载图像。我使用另一个线程卸载/删除。我已经把我的问题浓缩成一段代码。在本例中,我不需要删除线程,但在我的实际程序中确实需要它,这就是它出现在这里的原因。(同样,如果我在主循环中而不是线程中删除,我不会遇到问题。使用线程,就像图像被复制到某个地方,只有一个副本被删除。) 更新是程序的主循环。以下是线程删除: clas

下面的示例使用了openFrameworks工具包,但我想我的错误不是openFrameworks特有的,所以我希望有人能提供帮助

我使用XthreadEdimageLoader动态加载图像。我使用另一个线程卸载/删除。我已经把我的问题浓缩成一段代码。在本例中,我不需要删除线程,但在我的实际程序中确实需要它,这就是它出现在这里的原因。(同样,如果我在主循环中而不是线程中删除,我不会遇到问题。使用线程,就像图像被复制到某个地方,只有一个副本被删除。)

更新是程序的主循环。以下是线程删除:

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