Утечка памяти при изменении значений вектора C ++ в DLL - PullRequest
0 голосов
/ 16 мая 2018

Я работаю над плагином C #, который вызывает C ++ DLL (с ​​оберткой C в DLL, чтобы сделать ссылку). В программе на C # я несколько раз вызываю один и тот же метод callMe моей DLL. В этом методе я изменяю значения в векторе thermogram, чтобы позже выполнить другие операции.

Между каждым вызовом я пытаюсь освободить память, потому что на данный момент при каждом вызове увеличение оперативной памяти на 18 Мо, так что это совсем не хорошо. Я не понимаю почему, потому что при каждом вызове я просто заменяю некоторые значения в существующем векторе (если быть точным, 2000). Поэтому я попытался освободить память другим способом (методы из векторного класса: erase, clear, shrink_to_fit), но ничего не изменило результат. И все форумы говорят об этих предыдущих способах, поэтому я не знаю, что еще попробовать.

C ++ метод:

bool MyClass::callMe(int pixel_value, int iImage)
{
    if (thermogram.size() == 0) {
        thermogram.resize(_nFrame - iFramesPass);
    }
    thermogram[iImage] = (double)pixel_value;
    sizeThermo = iImage;
    return true;
}

Я также стараюсь не проводить очистку между двумя вызовами, просто заменять значения при каждом новом вызове, но при этом увеличивается память.

Может быть, я что-то упускаю из-за вызова метода из DLL, или у меня просто утечка памяти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...