Форум программистов, компьютерный форум, киберфорум
Наши страницы

Утечка памяти. new/delete. Всё как доктор прописал, но не работает - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамические структуры данных ( функцию, которая будет удалять i-ый элемент) http://www.cyberforum.ru/cpp-beginners/thread995779.html
Помогите написать функцию, которая будет удалять i-ый элемент из структуры.Я очень плохо понимаю как это сделать.Кое-что наваял, но получилась какая-то ересь.Пишу в Qt. tstrtuct.h #ifndef...
C++ Наследование и инкапсуляция в C++ Как осуществляется наследование свойств объектов и инкапсуляция в C++? http://www.cyberforum.ru/cpp-beginners/thread995764.html
C++ Ошибка в проверке
Помогите, пожалуйста. Выдает ошибку на строчке if (state_a==state_a || state_b==state_b) m_str.flag2=true; #include <iostream> #include <fstream> #include <string> #include <algorithm>...
C++ Ребят, где ошибка?
Я только учусь, многого не знаю. Нужна помощь, подскажите, где ошибки? #include <iostream> #include <Windows.h> #include <cstdlib> #include <string> #include <cmath> using namespace std; ...
C++ Использование calloc/realloc/free http://www.cyberforum.ru/cpp-beginners/thread995748.html
//calloc.cpp //Использование calloc #include <stdio.h> #include <stdlib.h> #include <iostream> #include <locale> using namespace std; int main() { setlocale(LC_ALL,"Russian");
C++ Ошибка Объясните почему при запуске программы пишет ваш проект устарел и выдает ошибку имя файла не найдено???? подробнее

Показать сообщение отдельно
tutu
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 2

Утечка памяти. new/delete. Всё как доктор прописал, но не работает - C++

02.11.2013, 22:00. Просмотров 542. Ответов 3
Метки (Все метки)

Всем привет! Начну сразу с кода:
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
class A{
public:
    int mas[1000];
public:
    A(){}
    ~A(){}
};
 
class B{
public:
    A **a;
    B(){
        a=new A*[10];
        for(int i=0;i<10;i++)
            a[i]=new A[100];
    }
    ~B(){
        for(int i=0;i<10;i++)
            delete [] a[i];
        delete[] a;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    B *b;
    _getch();
    for(int i=0; i<100;i++){
        b = new B();
        delete b;       
    }
    _getch();
    return 0;
}
Второй вариант класса B, но создается и удаляется одномерный массив объектов класса А
C++
1
2
3
4
5
6
7
8
9
10
class B{
public:
    A *a;
    B(){
        a=new A[1000];
    }
    ~B(){
        delete[] a;
    }
};
Проблема следующая. В первом варианте кода происходит утечка памяти. Если переделать класс B как указано во втором варианте, то всё работает как надо. Т.е. двумерный массив не работает, одномерный всё ок. Код носит просто тестовый характер и функциональности в нем только занимать память, т.к. в более серьезном проекте я наткнулся на эту проблему и создал отдельную программу, что бы попытаться решить проблему. Работа с памятью заметна и в обычном диспетчере задач Windows. Перекопал тьму форумов и везде один и тот же вариант реализации удаления динамического двумерного массива. Спасибо за помощь и успехов в программировании.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru