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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
#1

подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти - C++

07.11.2010, 21:46. Просмотров 318. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
  vector<int*> mas;
 
int* buf;
for(int i=0;i<10;i++)
{
  buf=new int[10];
  mas.push_back(buf);
}
delete buf;
for(int i=0;i<10;i++)
{
    delete mas[i];
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2010, 21:46     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти
Посмотрите здесь:

C++ Подскажите пожалуйста, как правильно освободить память
Утечки памяти и STL C++
Подскажите пожалуйста, что я дулаю не правильно? C++
Утечки памяти C++
C++ Подскажите пожалуйста как правильно расспечатать
подскажите пожалуйста что я здесь делаю не правильно? C++
Про утечки памяти C++
Я создаю утечки памяти ! C++
Не будет ли утечки памяти? C++
Определение утечки памяти C++
C++ Пожалуйста подскажите как правильно!
Поиск утечки памяти C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.11.2010, 21:49     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти #2
утечки вроде как не будет, но конструкция надо сказать не очень
C++
1
std::vector<std::vector<int> > mas;
так то оно получше будет
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
07.11.2010, 21:58  [ТС]     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти #3
Ну там массив в контейнере не вилик, размер меняется от 1 до 5, не хотелось изза этого помещать вектор в каждый контейнер. А вот размер вектора довольно таки большой, поэтому решил использовать указатель в контейнере.
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,341
07.11.2010, 22:01     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти #4
Утечка - может, будет, а может, не будет. Гарантированно будет неопределенное поведение.

Ошибок в этом коде я вижу две:
1. Если память выделяется через new int[что-то], то удаление должно выполняться delete[], и никак иначе - т.е. должно быть delete[] mas[i];
2. Блок памяти mas[9] будет удаляться дважды - первый раз в строке 9, второй раз в строке 12. Скорее всего, при втором удалении программа просто вылетит....
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
07.11.2010, 22:10  [ТС]     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти #5
delete buf; - да ступил чето, а ведь говорил себе, что буду освобождать память только через вектор)
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.11.2010, 22:11     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти #6
Цитата Сообщение от besh
<a;1092408]Ну там массив в контейнере не вилик, размер меняется от 1 до 5, не хотелось изза этого помещать вектор в каждый контейнер. А вот размер вектора довольно таки большой, поэтому решил использовать указатель в контейнере.
Глупости это все, не такой уж он и большой:
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <vector>
 
int main()
{
        std::vector<int> v;
        std::cout << sizeof(v) << std::endl;
}
У меня результат равен 24 байтам - мелочь какая-то.

А теперь попробуйте сопоставить размер в байтах со временем, которое Вы потратите на изобретение рабочей конструкции. Это при учете того, что в векторе должны быть обработки исключительных ситуаций, которые может бросить new. Ваш код разрастется до невероятных размеров. Будьте проще. Если уж используете вектора, так используйте их.
Yandex
Объявления
07.11.2010, 22:11     подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти
Ответ Создать тему
Опции темы

Текущее время: 18:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru