Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2015, 16:58   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Обьект в динамике

Доброго дня !!!

У меня такой вопрос .

В классе есть массив данных типа int.

для разных обьектов класса размер массива разный.

сам обьект лежит в области динамической памяти .

нужно ли массив класса ложить в динамическую память ?
RAFA91 вне форума Ответить с цитированием
Старый 20.05.2015, 18:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А он и так у тебя в кучу ляжет )
Врядли компиль сделает так чтоб массив лег в стек.
И кстати почему спрашиваешь? Не все ли равно где данные в памяти будут храниться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2015, 12:23   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Stilet размер массива всегда надо указывать в

инициализации. у меня размер массива для каждого обьекта разный.

зачем засирать стек ?

если так - то я получаю ошибку int x[n];

Код:
#include <conio.h>
#include<iostream>


using namespace std;

class Ca

{
	int n;

	int x[n];

public:

	Ca() {}

	Ca(int c) : n(c) {}

	~Ca() {}
};

int main()

{
	Ca *v = new Ca(10);

	getch();

	return 0;
}

Последний раз редактировалось RAFA91; 21.05.2015 в 12:34.
RAFA91 вне форума Ответить с цитированием
Старый 24.11.2015, 18:42   #4
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Подскажите пожалуйста почему при выполнении

Код:
int *p;
    int *a = new int[5];
    p=a+4;
    delete p;
получаю аварийное завершение ?

пытаюсь освободить последнюю ячейку
RAFA91 вне форума Ответить с цитированием
Старый 24.11.2015, 18:52   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так нельзя, только весь блок.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.11.2015, 16:26   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так нельзя, только весь блок.
delete а; освобождает же 0-ю ячейку
RAFA91 вне форума Ответить с цитированием
Старый 25.11.2015, 16:27   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

на вызов new[] должен быть вызов delete[]
Код:
delete[] a;
Цитата:
освобождает же 0-ю ячейку
нет, весь блок.(или UB будет, что верно)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.11.2015, 16:54   #8
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
на вызов new[] должен быть вызов delete[]
Код:
delete[] a;
нет, весь блок.(или UB будет, что верно)
http://ideone.com/czWg3h

нету же ошибки.

что при этом освобождается ?
RAFA91 вне форума Ответить с цитированием
Старый 27.11.2015, 17:13   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вроде основная разница между delete и delete[] в вызове деструкторов всех объектов. А может быть даже разное поведение в этом случае в зависимости от компилятора (UB), не уверен.

https://www.google.com/search?q=c%2B...lete+vs+delete

Ну в любом случае надо использовать delete[] после new[], и освобождение по одной ячейке невозможно и не нужно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.11.2015, 17:21   #10
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В по одной ячейке невозможно и не нужно.
было бы хорошо освобождать последнюю ячейку.
в векторе на сколько я знаю при удалении звена из середины просто идет
перезапись влево , а освобождаются фактически последние звенья.
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение параметров в динамике. z0rde Фриланс 1 09.04.2013 22:46
Требуется ссылка на обьект BaronVik C# (си шарп) 1 07.11.2011 23:15
Enum в обьект. vjmap C# (си шарп) 2 08.10.2011 11:16
обьект в обьект... Olejik Общие вопросы по Java, Java SE, Kotlin 6 22.03.2010 22:23
Не могу создать обьект mrandrey Общие вопросы Delphi 6 04.06.2007 16:04