-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

SafeArrayGetElement - вызывает утечку памяти

08.10.2020, 17:38. Показов 21080. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Подскажите пожалуйста, не могу понять, куда исчезает память:

C++
1
2
3
4
5
6
7
8
9
int main()
{
 
for(int i=0; i<1000; i++)
{
     My_Get_Range(); //Вызываю функцию
}
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void My_Get_Range()
{
//Читаю данные из Ексель
 
......
 
// Создаем Variant массив, куда будет записаны данные из нужного диапазона ексель: -------------------------------------
        
VARIANT arr;
arr.vt = VT_ARRAY | VT_VARIANT;
    {
        SAFEARRAYBOUND sab[2];
        arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab);
    }
//------------------------------------------------------------------------------------------------------------------------------------------
 
 
AutoWrap(DISPATCH_PROPERTYGET, &arr, pXlRange, (LPOLESTR)L"Value", 0); // Вызываем AutoWrap с MSDN`а
 
 
VARIANT v;
VariantInit(&v); // переменная куда будем записывать/доставать элемент из массива arr
 
 
 
 
for (int i = 0; i < 1000000; i++)
    {
 
        long indexes[2] = { 1,  1 };
 
        SafeArrayGetElement(arr.parray, indexes, &v); // получим указанный элемент по индексу из arr в переменную v
 
        BSTR ival_bstr = v.bstrVal;
        string Finaly_value;
 
        Finaly_value = _com_util::ConvertBSTRToString(ival_bstr); //Тут значение string взятой по индексу 1,1 из массива arr
    }
 
 
    pUnk->Release();
    pXlRange->Release();
    pXlSheet->Release();
    pXlApp->Release();
 
    VariantClear(&arr);
    VariantClear(&v);
 
    CoUninitialize();
}
И вот я не понимаю - с каждой итерацией цикла - память заполняется и заполняется:
- Куда она выделяется внутри цикла.
- И самое главное, что по завершении функции My_Get_Range - ничего не очищается автоматически. И с началом вызова этой же My_Get_Range функции - память начинает тратится + к тому, что уже был выделено в предыдущем вызове My_Get_Range.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2020, 17:38
Ответы с готовыми решениями:

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Проверка на утечку памяти
Есть оконное приложение где куча контейнеров и т.д. Как можно проверить, есть ли утечки памяти? (Qt5.7)

Изолировать утечку памяти
Есть давний проект. В нем есть утечка памяти. Разобраться с самой утечкой - долго, там, судя по отзывам в сети, проблемы у компилятора. ...

4
6771 / 4565 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.10.2020, 17:52
Лучший ответ Сообщение было отмечено Optimus11 как решение

Решение

Цитата Сообщение от Optimus11 Посмотреть сообщение
И вот я не понимаю - с каждой итерацией цикла - память заполняется и заполняется:
VariantClear не вызываешь в цикле

C++
1
2
3
       Finaly_value = _com_util::ConvertBSTRToString(ival_bstr); //Тут значение string взятой по индексу 1,1 из массива arr
VariantClear(&v);
    }
Добавлено через 2 минуты
А лучше воспользуйся классом variant_t
C++
1
2
3
4
5
6
7
8
long indexes[2] = { 1,  1 };
 
_variant_t v;       
    SafeArrayGetElement(arr.parray, indexes, &v); // получим указанный элемент по индексу из arr в переменную v
 
    string Finaly_value;
 
    Finaly_value = _com_util::ConvertBSTRToString(v.bstrVal); //Тут значение string взятой по индексу 1,1 из массива arr
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
08.10.2020, 18:00  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
VariantClear не вызываешь в цикле

А лучше воспользуйся классом variant_t
Неа, не помогает, память также увеличивается и все тут.
0
6771 / 4565 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.10.2020, 18:03
Лучший ответ Сообщение было отмечено Optimus11 как решение

Решение

Цитата Сообщение от Optimus11 Посмотреть сообщение
Неа, не помогает, память также увеличивается и все тут.
C++
1
2
3
char *psz = _com_util::ConvertBSTRToString(V_BSTR(&v)); //Тут значение string взятой по индексу 1,1 из массива arr
 Finaly_value = psz;
 delete[] psz;
Добавлено через 9 секунд
https://docs.microsoft.com/ru-... ew=vs-2019
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
08.10.2020, 18:05  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Вотжежь блин, Спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2020, 18:05
Помогаю со студенческими работами здесь

Найти утечку памяти
Приветствую всех! Много раз слышал, что с помощью CodeGuard можно проверить есть ли в приложении утечка памяти. Подскажите, как это сделать?

Проверка на утечку памяти
Всем доброго времени суток. Сразу оговорюсь, я не профессионал, программирование - моё хобби, которое помогает мне по основному...

Как отследить утечку памяти?
Как в vs(ну или в общем) отследить учтечку памяти? То есть если было выделено память под что то с помощь new и по каким то причинам не было...

Вопрос про утечку памяти в Qt
У меня вопрос. В этом коде: #include &lt;QApplication&gt; #include &lt;QFont&gt; #include &lt;QPushButton&gt; #include &lt;QWidget&gt; class...

Qt Creator проверка на утечку памяти
Всем привет! Подскажите как в Qt Creator проверить код на утечку памяти. Какие утилиты использовать, а именно графические. Работаю под...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru