powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите разобраться с утечками памяти.
51 сообщений из 51, показаны все 3 страниц
помогите разобраться с утечками памяти.
    #39921436
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
В общем реализовал я динамическую структуру типа кольцо.
гавнокод свой приведу.
Код: plaintext
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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
// ConsoleApplication6.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <iostream>

struct mystruct {
    int x;
    mystruct* Next;

};

void insert(mystruct* item, int index, int  value) {
    mystruct* Current = item;
    int i = 1;
    while (!(Current->Next == item || i == index)) {
        Current = Current->Next;
        i++;
    } 
    
    mystruct* Newitem = new mystruct;
    Newitem->x = value;
    Newitem->Next = Current->Next;
    Current->Next = Newitem;


    std::cout << i<< std::endl;

}

mystruct* deleteitem(mystruct* item, int x) {//ищет в кольце все значения равные x и удаляет их
    mystruct* Nextitem = item;
    mystruct* Currentitem = item;
    

    Nextitem = item;
    //delete(Currentitem);
    int size = sizeof(item);

    if (Currentitem->x == x && Currentitem == item)
        //значит элемент по счету номер 1 надо удалить
        //для этого найдем второй элемент
        //и последний, в последнем сделаем ссылку на первый
        //а первый отвяжем у далим.
    {
        mystruct* DelItem = nullptr;
        mystruct* Last = item;
        Nextitem = Currentitem->Next;
        do {
            Last = Last->Next;
        } while (Last->Next != item);
        Last->Next = Nextitem;
        DelItem = Currentitem;
        delete DelItem; //вот такой костыль я придумал чтобы удалить из кучи мой объект.
        Currentitem = Nextitem;
        Currentitem = deleteitem(Currentitem, x);//пойдем дальше удалять рекурсивно вдруг
        // и элемент номер 2 искомый и его тоже надо удалить
    }

    else { // значит искомые элемент стоит не сначала кольца
        mystruct* Postitem = 0;
        do {
            mystruct* NextNextitem = item;

            Nextitem = Currentitem->Next;
            NextNextitem = Nextitem->Next;

            if (Nextitem->x == x) {
                Currentitem->Next = NextNextitem;
                delete Nextitem;

            }
            else { //delete Currentitem; 
            Currentitem = Currentitem->Next; }




        } while (Currentitem->Next != item);
        Currentitem = item;
    }
    return Currentitem;
};
int main()
{
    mystruct* item = new mystruct;
    mystruct* first = item;
    mystruct* Nextitem = item;
    bool iffirst = true;
    item->x = 0;
    int input = 0;
    //считываем в цикле числа, помещая их в кольцао, до тех пор пока не будет введено 0. тогда цикл завершаем.
    //проще алгоритма чтобы было всё четко я не додумал. :(
    do {

        std::cin >> input;
        if (iffirst && input != 0) { item->x = input; iffirst = false; }
        else {
            if (input != 0) {
                Nextitem = Nextitem->Next = new mystruct;
                Nextitem->x = input;
            }
            else Nextitem->Next = first;
        }
    } while (input != 0);



    std::cout << std::endl;

    item = deleteitem(item, 5);

    //insert(item, 2,555);

    Nextitem = item;
    //вывод кольца . цикл завершается только крестиком в окне, ведь это кольцо, 
    //а оно бесконечно, можно было бы и завершить по желанию , но не в этом суть :)
    do {
        std::cout << Nextitem->x << std::endl;
        Nextitem = Nextitem->Next;
        system("pause");
    } while (true);

    
    


}



Кратко опишу. у меня кольцо подобно однонаправленному списку с той лишь разницей с ним, что последний элемент указывает на первый(собственно определение кольца). элементы это целые числа отличные от нуля. список я описываю структурой mystract . в main кольцо забиваем значениями, а потом insert и delete мы можем вставить и удалить элемент соответственно. собственно вопрос в delete. один из параметров это целое число. алгоритм функции находит элементы кольца равные этому параметру и удаляет их. При этом я сначала "удалял" элементы отвязывая их от соседних. но вот озаботился , что сами объекты надо удалять физически delete-шкой.
1) на мой взгляд я коряво делаю вот таким образом :
Код: plaintext
1.
2.
       DelItem = Currentitem;
       delete DelItem; 


2) Как мне проверить , что я освобождаю ли я таким образом память ?
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921450
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron812) Как мне проверить , что я освобождаю ли я таким образом память ?

DrMemory, Valgrind.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921452
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81insert(mystruct* item, int index, int value)

Ну и чисто теоретически побурчать: кольца не применяются там, где у элемента есть индекс,
поэтому твоя реализация не столько кривая, сколько бессмысленная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921491
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81insert(mystruct* item, int index, int value)

Ну и чисто теоретически побурчать: кольца не применяются там, где у элемента есть индекс,
поэтому твоя реализация не столько кривая, сколько бессмысленная.


нету в моей реализации индексов.
да, кольца изучаю только для повышения скилов.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921503
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81нету в моей реализации индексов.

А "int index" это что тогда?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921505
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81нету в моей реализации индексов.

А "int index" это что тогда?

позиция где надо вставить элемент. я думал вы имели ввиду, что мои элементы где-то пронумерованы. нет не пронумерованы.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921508
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Позиция" это и есть нумерация. В результате см.выше.

Если эту позиционность выкинуть, код сокращается, упрощается и ускоряется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921521
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

"Позиция" это и есть нумерация. В результате см.выше.

Если эту позиционность выкинуть, код сокращается, упрощается и ускоряется.


ну не понимаю вас. вот у массива к примеру есть позиция элементов - да, причем это физическая позиция - индекс.
а тут условие задачи такое которую я сам себе поставил - выставить после 2-го элемента какой-то новый элемент. но физически у кольца я никаких индексов не прописывал.
Вот где тут позиция ?
Код: plaintext
1.
2.
3.
4.
5.
struct mystruct {
    int x;
    mystruct* Next;

};


тут "x" - это данные. никакая не позиция , не путать
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921537
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
у меня кольцо подобно однонаправленному списку с той лишь разницей с ним, что последний элемент указывает на первый

А нельзя в векторе вместо .end() отдавать .begin() ?
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921542
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
andron81
у меня кольцо подобно однонаправленному списку с той лишь разницей с ним, что последний элемент указывает на первый

А нельзя в векторе вместо .end() отдавать .begin() ?


нельзя . важно использовать указатели.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921546
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
нельзя . важно использовать указатели.

для какой задачи?
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921554
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
andron81
нельзя . важно использовать указатели.

для какой задачи?


ну тут мне важна реализация. до векоторов я может и дойду и реализация там будет проще, но писать я вряд ли на них буду . но мне надо указателями.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921556
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

вышло довольно неплохо. и утечки можно если что посмотреть сделав паузу на предпоследней строке и почитав оутпут, но я их не выявил (искал подвисшие в памяти удаляемые элементы моего кольца). если кому интересно на поиск багов (хотя сомневаюсь , что будет кто заниматься этим :) ) или может полезно (студенту может какому), то пожалуйста.

Код: plaintext
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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
// ConsoleApplication6.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <iostream>
#include <conio.h>

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif

const int KEY_ESC = 27;

struct mystruct {
    int x;
    mystruct* Next;

};

mystruct* insert(mystruct* item, int index, int  value) {
// по сути процедура абсурдна так как индекс для элемента кольца это что-то нелепое
// но грубо говоря будем считать , что индекс это порядковый номер их занесения в кольцо.

    if (item == nullptr) // если кольцо пустое , тогда индекс не имеет значения вставляем первым да и всё
    {
        
        item = new mystruct;
        item->x = value;
        item->Next = item;
        std::cout << "The ring was empty. Was added one element x="<<value << std::endl << std::endl;
        return item;
    } 
    
        
    
    if (index == 0) {//если хотим "в начало" кольца вставить новый элемент
        
        mystruct* Last = item;
        while (Last->Next != item)  Last = Last->Next;  //посчитаем последний элемент
        mystruct* Newitem = new mystruct;
        Last->Next = Newitem;
        Newitem->x = value;
        Newitem->Next = item;
        item = Newitem;
        std::cout << "Was added one element x="<<value <<" at first place " << std::endl << std::endl;
        return item;
    }
    
        int i = 1;
        mystruct* Current = item;
        while (!(Current->Next == item || i == index)) {
            Current = Current->Next;
            i++;
        }

        mystruct* Newitem = new mystruct;
        Newitem->x = value;
        Newitem->Next = Current->Next;
        Current->Next = Newitem;
        std::cout << "Was added one element x="<< value<< " after element #"<<index << std::endl << std::endl;
        return item;
    
    
    //std::cout << i<< std::endl;

}

mystruct* deleteitem(mystruct* Item,  int x) {//ищет в кольце все значения равные x и удаляет их

    mystruct* second;
    mystruct* Last=Item;
    mystruct* del;
    if (Item != nullptr ) // если кольцо не пустое , то будем работать
    {
        while (Last->Next != Item)  Last = Last->Next;  //посчитаем последний элемент

    //если первый же элемент кольца наш искомый
    while (Item->x == x)
    {
        //нужно найти второй элемент 
        //и последний
        //приравниваем к последнему next = указатель на второй элемент.
        //висящий первый элемент удаляем delete
        if (Item->Next == Item && Item->x == x) return nullptr;// Если кольцо из одного элемента и этот элемент надо удалить, то сразу nullptr
        second = Item->Next;
        Last->Next= second;
        delete Item;
        Item = second;
        

    }
    }
    if (Item != nullptr) //если наше кольцо не пустое , то посмотрим наличие элемента далее.
    {
        mystruct* Next = Item;
        do
        {
            if (Next->Next->x == x) {
                del = Next->Next;  
                Next->Next = Next->Next->Next; delete del;
            } else 
            Next = Next->Next;
        } while (Next->Next != Item);
    }

    std::cout << "Was deleted all elements equal " << x<< std::endl << std::endl;
    return Item;
};

mystruct* initring(mystruct* item) {//функция заполняет кольцо элементами

mystruct* first = item;
mystruct* Nextitem = item;
mystruct* last = item;

bool iffirst = true;
item->x = 0;
int input = 0;
int count = 0;
//считываем в цикле числа, помещая их в кольцао, до тех пор пока не будет введено 0. тогда цикл завершаем.

std::cout << "Enter ring. Enter 0 for finish " << std::endl << std::endl;
do {

    std::cout << "Enter element of ring ";  std::cin >> input;
    if (iffirst && input != 0) { item->x = input; iffirst = false; }
    else {
        if (input != 0) {
            Nextitem = Nextitem->Next = new mystruct;
            Nextitem->x = input;
            count++;
        }
        else { Nextitem->Next = first; last = Nextitem; }
    }
} while (input != 0);

if (count == 0) { item = nullptr; }
return item;
}
void printRing (mystruct*  item)
{
    mystruct*  Nextitem = item;
//вывод кольца . выводит по одному элементу . завершаем вывод клавишей Esc, а то так будет бесконечно выводить :)
    std::cout << "It's printing ring. Press Enter for next elements and Esc for finish "<< std::endl ;
char l;
if (item != nullptr) {
    do {
        std::cout << Nextitem->x << " " ;
        Nextitem = Nextitem->Next;

    } while (_getch() != KEY_ESC);
    std::cout << std::endl << std::endl;
}
else std::cout << "Ring is empty" <<std::endl << std::endl;
}

int main()
{
    mystruct* item = new mystruct;
    item = initring(item); //инициализация. ввод элементов кольца.

    std::cout << std::endl;
    printRing(item); //выводим кольцо
    item = insert(item, 0, 5);//вставляем в начало элемент равный 5
    printRing(item); //выводим кольцо
    item = insert(item, 1, 80);//вставляем после элемента №1 элемент равный 80
    printRing(item); //выводим кольцо
    item = insert(item, 0, 5);//вставляем в начало элемент равный 5
    printRing(item); //выводим кольцо
    item = insert(item, 2, 90);//вставляем после элемента №2 элемент равный 90
    printRing(item); //выводим кольцо
    item = insert(item, 4, 74);//вставляем после элемента №3 элемент равный 74
    printRing(item);//выводим кольцо

    item = deleteitem(item, 5);//ищем элементы равные 5 и удаяем их
    printRing(item);//выводим кольцо
 
#ifdef _DEBUG
    _CrtDumpMemoryLeaks();
#endif 
}
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921560
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
но мне надо указателями.

а гвоздь вам микроскопом забить не нужно?
полезный навык на случай, если вдруг окажетесь на острове после кораблекрушения микро-биологов.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921561
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторitem = deleteitem(item, 5);//ищем элементы равные 5 и удаяем их
это в векторе есть изкаропки
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921565
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81ну тут мне важна реализация

Ну, у Вас получилась типичная поделка начинающего с функциями, имеющими время выполнения
O(N) вместо O(1). Она, конечно, работает, но в разы медленнее чем на её месте работала бы
структура, подходящая под задачу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921589
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81ну тут мне важна реализация

Ну, у Вас получилась типичная поделка начинающего с функциями, имеющими время выполнения
O(N) вместо O(1). Она, конечно, работает, но в разы медленнее чем на её месте работала бы
структура, подходящая под задачу.


я и есть начинающий. правда с функциями я знаком .
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921595
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81ну тут мне важна реализация

Ну, у Вас получилась типичная поделка начинающего с функциями, имеющими время выполнения
O(N) вместо O(1). Она, конечно, работает, но в разы медленнее чем на её месте работала бы
структура, подходящая под задачу.


Ну то есть структура должна была предполагать индекс, я верно Вас понимаю?
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921599
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Ну то есть структура должна была предполагать индекс, я верно Вас понимаю?
Нет конечно. Это бессмысленно. Индекс используется для нахождения элемента в списке, начиная с первого элемента. Но так как у тебя изначально кольцо - то и первого элемента в принципе быть не должно. И соответственно индексация тоже бессмысленна.
Вот тут и начинаются все проблемы - чтобы вообще не потерять все кольцо, надо помнить хотя бы один его элемент. Но ты назвал этот указатель first - поэтому все читающие твой код предполагают наличие первого элемента в кольце.
Во вторых, у функции insert есть параметр int index - зачем он?? Зачем вставляя в кольцо новое звено отсчитывать сколько-то там элементов от какого-то элемента??? Ты помнишь один из элементов кольца? Ну вот и вставляй новое звено после него.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921604
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
andron81
Ну то есть структура должна была предполагать индекс, я верно Вас понимаю?
Нет конечно. Это бессмысленно. Индекс используется для нахождения элемента в списке, начиная с первого элемента. Но так как у тебя изначально кольцо - то и первого элемента в принципе быть не должно. И соответственно индексация тоже бессмысленна.
Вот тут и начинаются все проблемы - чтобы вообще не потерять все кольцо, надо помнить хотя бы один его элемент. Но ты назвал этот указатель first - поэтому все читающие твой код предполагают наличие первого элемента в кольце.
Во вторых, у функции insert есть параметр int index - зачем он?? Зачем вставляя в кольцо новое звено отсчитывать сколько-то там элементов от какого-то элемента??? Ты помнишь один из элементов кольца? Ну вот и вставляй новое звено после него.


Ну да задача поставлена мной же, допускаю, что абсурдность присутствует. Но задача есть задача. Да и вопрос главный ведь не по инсерту. Бог с ним с ним с инсертом. Вопросы по delete и по утечкам памяти.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921605
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Зачем вставляя в кольцо новое звено отсчитывать сколько-то там элементов от какого-то элемента??? Ты помнишь один из элементов кольца? Ну вот и вставляй новое звено после него.


Ну вот бзик. Да верно подмечено, что кольцо это не понятно где начало, а где конец. Ну будем предполагать, что первый элемент это тот кто создался первым в кольце. От сюда и индексация, неявная.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921621
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Ну будем предполагать, что первый элемент это тот кто создался первым в кольце. От сюда и индексация, неявная.

Оккам возражает))
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921623
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
andron81
Ну будем предполагать, что первый элемент это тот кто создался первым в кольце. От сюда и индексация, неявная.

Оккам возражает))


???
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921626
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Изопропил
пропущено...

Оккам возражает))


???

https://ru.wikipedia.org/wiki/Бритва_Оккама
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921782
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Ну да задача поставлена мной же, допускаю, что абсурдность присутствует. Но задача есть задача. Да и вопрос главный ведь не по инсерту. Бог с ним с ним с инсертом. Вопросы по delete и по утечкам памяти.

это называется "снежный ком"
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921788
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Вопросы по delete и по утечкам памяти.

Это совсем отдельные вопросы, не связанные со структурами. И ответ на них прост до
безобразия: каждому new должен соответствовать ровно один delete, не больше и не меньше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921911
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81Вопросы по delete и по утечкам памяти.

Это совсем отдельные вопросы, не связанные со структурами. И ответ на них прост до
безобразия: каждому new должен соответствовать ровно один delete, не больше и не меньше.


Если бы было все так просто тогда вот эти там
_CrtDumpMemoryLeaks были бы не нужны. А так они существуют.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921922
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81А так они существуют.

Да. Потому что даже такие простые вещи осиливают не все и не всегда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921942
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот комментарий - прекрасен.

Код: plaintext
1.
// ConsoleApplication6.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.


В нем есть какая-то глубокая философия....
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39921968
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

это ж вижуалстудия пишет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// ConsoleApplication22.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922004
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видите как давно я не кодил на вижуалах. Мдя...
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922006
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В нем есть какая-то глубокая философия....

Где начало того конца, которым оканчивается начало? (Козьма Прутков)
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922026
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81А так они существуют.

Да. Потому что даже такие простые вещи осиливают не все и не всегда.


Я собственно и хотел получить от кого-нубудь из вас это. Но спасение утопающего...
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922035
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Dimitry Sibiryakov

пропущено...

Да. Потому что даже такие простые вещи осиливают не все и не всегда.


Я собственно и хотел получить от кого-нубудь из вас это. Но спасение утопающего...

Эти "простые вещи" очень сложны при непростом использовании. В остальном полностью согласен с Сибиряковым: не можешь - не используй. Для немогучих есть умные указатели .
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922037
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

Эти "простые вещи" очень сложны при непростом использовании. В остальном полностью согласен с Сибиряковым: не можешь - не используй. Для немогучих есть умные указатели .


как будто богом сказано . а с чего Вы взяли , что я не могу ??? я попробовал и запросил консультацию - как найти утечки.
Между прочим даже по вашей ссылке говорится, что в крупных проектах(а их не дилетанты вроде меня пишут, я думаю) сложно избежать на 100% утечек.
так или иначе в своей "хрени" мне удалось избежать их, при помощи "нагугленного" мною механизма поиска и руководствуясь: один new , один delete, а об этом я догадывался без подсказок. поэтому если озаботится и заморочиться, а я начинающий в C ++, то даже мне понадобилось пол дня(думаю это не очень много для зеленого) чтобы поубирать баги (не хвалюсь) . кстати в последней выданной тут мною редакции утечка всё же есть. :)
И цель этой хрени именно просветительная для меня (реализация именно на указателях), а не для какого - либо практического применения. Поэтому возможно справедливо выше предлагали реализовывать при помощи векторов где и опасности утечек наверно не будет (ещё не дошёл до этой темы).

Короче спасение утопающих , дело рук самого утопающего !
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922039
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
как будто богом сказано . а с чего Вы взяли , что я не могу ??? я попробовал и запросил консультацию - как найти утечки.

В этом и проблема, кто умеет - тот сам находит, не просит чужой помощи, тут все элементарно, но надо четко понимать что происходит.
Вобщем либо сам разберешься, либо не заморачивайся, это не твое.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922040
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
andron81
как будто богом сказано . а с чего Вы взяли , что я не могу ??? я попробовал и запросил консультацию - как найти утечки.

В этом и проблема, кто умеет - тот сам находит, не просит чужой помощи, тут все элементарно, но надо четко понимать что происходит.
Вобщем либо сам разберешься, либо не заморачивайся, это не твое.


ну механизм _CrtDumpMemoryLeaks то можно подсказать было только и всего. а дальше да - сам !
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922042
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Между прочим даже по вашей ссылке говорится, что в крупных проектах(а их не дилетанты
вроде меня пишут, я думаю) сложно избежать на 100% утечек.

А ты думаешь эти "не дилетанты" чем-то отличаются от тебя кроме опыта?..
Например, последняя из моих утечек была тривиальной: я забыл поставить вызов delete в
деструктор. И чем больше проект, тем больше таких мелких мест где можно забыть такую
тривиальную вещь.

Но таки да, налитие знаний в черепушку - дело рук владельца черепушки, помощи с этим
искать бесполезно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922043
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81механизм _CrtDumpMemoryLeaks то можно подсказать было только и всего

Ты не поверишь, но об этом механизме никто не знает. Ибо он не предназначен для прямого
использования, а вызывается автоматически для отладочных сборок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922044
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Между прочим даже по вашей ссылке говорится, что в крупных проектах(а их не дилетанты вроде меня пишут, я думаю) сложно избежать на 100% утечек.

Ссылка первая попавшаяся, я ее не читал целиком. Лично я хоть и знаю С++, но писать все на нем не буду, слишком сложно. Пишу только маленькие кусочки требующие максимальной производительности.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922045
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если приложение виснет/падает - вот и ищи, нарабатывай навыки. А так, "для себя" - занятие впустую, все равно что изучать 34 падежа венгерского языка.
Удаляй выделенную память после использования сам или делегируй сие контейнеру-владельцу. Не забывай изучать спецификации api используемых библиотек - возможно, созданные структуры должен освобождать именно ты.
Если доберешься до реальных проблем - изучай специнструменты: 22071093 .
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922046
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сразу checklist делать.
- Статический анализатор гонял? Гоняй
- отладночный режим включал? Не? Включай.
- DrMemory, Valgrind запускал? Не? Запускай.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922047
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создатели топят за умные указатели как раз
а delete - прошлый век

andron81
Поэтому возможно справедливо выше предлагали реализовывать при помощи векторов где и опасности утечек наверно не будет (ещё не дошёл до этой темы).

конечно не будет, там всё уже отлажено
всегда надо юзать std::библиотеки по возможности
и vector - самая частая из них
почитайте книжку (на англ.)
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922049
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Можно сразу checklist делать.
- Статический анализатор гонял? Гоняй

нет.

mayton

- отладночный режим включал? Не? Включай.


естественно . я бы всю эту хренатень не сделал бы без отладки ваще,
да и с _CrtDumpMemoryLeaks я умею только в режиме отладки .

mayton

- DrMemory, Valgrind запускал? Не? Запускай.

нет.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922050
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
создатели топят за умные указатели как раз
а delete - прошлый век

andron81
Поэтому возможно справедливо выше предлагали реализовывать при помощи векторов где и опасности утечек наверно не будет (ещё не дошёл до этой темы).

конечно не будет, там всё уже отлажено
всегда надо юзать std::библиотеки по возможности
и vector - самая частая из них
почитайте книжку (на англ.)


да понятно всё. кто-то даже скажет, что и плюсы прошлый век. есть же питон, шарп. к примеру там вроде бы как над моей проблемой не стоит вообще заморачиваться. но лучше всего изучить плюсы дабы иметь представление , а на шарпы и прочее с таким багажом перейти будет проще.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922053
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не надо никуда переходить, C++ - лучший
и самый эффективный на планете
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, ай-ай-ай.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922059
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
там вроде бы как над моей проблемой не стоит вообще заморачиваться

c# - мусоросборщик не панацея, бывают нежданчики
И мусор залипает и преждевременное удаление случается
и слабые ссылки применяются

Хотя здесь это оффтоп
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922063
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
andron81
там вроде бы как над моей проблемой не стоит вообще заморачиваться

c# - мусоросборщик не панацея, бывают нежданчики
И мусор залипает и преждевременное удаление случается
и слабые ссылки применяются

Хотя здесь это оффтоп


Спасибо. Запомнил
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про шарповый мусорщик и его проблемы - довайте отдельный топик.

Мне тоже интересно.
...
Рейтинг: 0 / 0
помогите разобраться с утечками памяти.
    #39922073
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

У Рихтера всё описано
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите разобраться с утечками памяти.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]