Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамические структуры данных ( функцию, которая будет удалять i-ый элемент) http://www.cyberforum.ru/cpp-beginners/thread995779.html
Помогите написать функцию, которая будет удалять i-ый элемент из структуры.Я очень плохо понимаю как это сделать.Кое-что наваял, но получилась какая-то ересь.Пишу в Qt. tstrtuct.h #ifndef TSTRUCT_H #define TSTRUCT_H #include "mainwindow.h" struct Array{ QString aFIO;
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> #include <iterator> #include <vector> #include <set>
C++ Ребят, где ошибка?
Я только учусь, многого не знаю. Нужна помощь, подскажите, где ошибки? #include <iostream> #include <Windows.h> #include <cstdlib> #include <string> #include <cmath> using namespace std; int main()
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
03.11.2013, 19:45  [ТС]     Утечка памяти. new/delete. Всё как доктор прописал, но не работает
Спасибо всем за ответы, проблему решил. Я только сегодня заметил что тестовый пример отличается от проблемного проекта. Т.к. меня печалят темы на форумах где есть вопрос, проблема скорее всего решена, а автор не соизволил написать решение, поэтому напишу в чем была проблема. Может кому поможет.
В реальности, мой проект это курсовик по шахматам. В нём есть класс Board это доска, в нем есть класс клетки Cell (их [8][8]). Клетки у меня были через указатель, именно в этом и оказалась проблема.
В жизни это так:
C++
1
ChessCell ***Cell;
Как выделялась память под них:
C++
1
2
3
4
 
Cell = new ChessCell**[8]; //выделил строки:
for(int i=0;i<8;i++)//Потом столбцы:
   Cell[i] = new ChessCell*[8];
Потом я добавил уже указатели самих клеток поля:
C++
1
2
3
for(int i=0;i<8;i++)
   for(int j=0;j<8;j++)
      Cell[i][j]=new ChessCell();
Но возник вопрос - А как я это всё освобождаю:
Было так:
C++
1
2
3
for (int i = 0; i<8; i++)
    delete [] Cell[i];
delete [] Cell;
И вот возникла мысль "Блин! А где я освобождаю память от указателей на сами клетки?!!". А ответ - Нигде. Вот она и была утечка. Добавил пару циклов до тех что выше написаны:
C++
1
2
3
for (int i=0; i<8;i++)
  for(int j=0; j<8;j++)
     delete Cell[i][j];
И всё заработало как часы Так что, у кого динамический массив указателей и есть утечка памяти, смотрите нет ли у вас того же косяка что был у меня. Всем спасибо за помощь.
 
Текущее время: 01:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru