![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| alex87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
При выполнении программы на этапе delete p[i]
выскакивает Debug Error Damage after normal block #xx at adres тоесть программа при освобождении памяти выкидывает данный эксепшн. В чём может быть дело??
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
с начала и до конца все неправильно
Это сообщение отредактировал(а) Fazil6 - 28.2.2008, 19:13 |
|||
|
||||
| alex87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
Все бы хорошо, но память не освобождается.
Это сообщение отредактировал(а) alex87 - 29.2.2008, 11:09 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
alex87, говорил уже и повторю - НЕ ПАРЬСЯ с delete там, где это делать необязательно
C++ это не только классы, но еще и библиотеки - STL, BOOST |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| alex87 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
Почему необязательно? STL и BOOST за меня это сделает? Хотелось бы знать , чем конкретно они мне могут помочь. Добавлено через 11 минут и 44 секунды
Виноват, неправ , не туда посмотрел Это сообщение отредактировал(а) alex87 - 29.2.2008, 11:41 |
||||
|
|||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
именно в твоем случае что-то типа:
синтаксис тебе навряд покажется знакомым и может даже запутанным, но тут просто нужно разобраться Добавлено @ 12:09 Damarus, не уверен, что нужно сразу в глубины буста кидать человека, который даже пока векторами не пользуется Это сообщение отредактировал(а) Alek86 - 29.2.2008, 12:10 |
|||
|
||||
| alex87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
Тогда ещё вопрос: у меня программа работает с базой данных.
К примеру я делаю Select * и загоняю где-то 10000 записей(к примеру) в vektor Насколько эффективно vektor работает с памятью? стоит ли его использовать в данном случае? |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
alex87, чтобы обеспечить плюрализм мнений, скажу, что лично я The Boost Multidimensional Array Library не пользуюсь, равно как и никакими другими специальными надстройками, хотя в моих задачах многомерные массивы имеются в изобилии. Любой из них я завожу, как одномерный :
По скорости доступа получается что-то вроде автоматического массива, хотя элементный доступ на первый взгляд не очень удобен :
Но всегда можно положить сие в класс и определить operator() (int i, int j, int k). А в большинстве случаев и это не нужно, поскольку при циклических операциях над элементами массива не обязательно непременно извлекать значения по индексам - достаточно одного указателя на текущий элемент и отсутствия ошибок при его передвижении на следующий. А указатели на указатели на указатели - это вообще жуть. Ведь это - не целостный массив, а валяющиеся в разных местах памяти куски. Это сообщение отредактировал(а) marcusmae - 3.3.2008, 14:14 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
достаточно эффективно, была тут когда то холивар тема vector vs standart array, так вот разницы в производительности не было. почему бы нет |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
marcusmae, в твоем примере при обходе массива можно легко напутать, и получить вместо последовательного доступа - случайный, а это падение производительности в десятки раз.
если в строке
не дай бог изменять k, j, i в неправильном порядке получишь такие тормоза какие не снились ни одной надстройке)) но это только при большом размере массива.... |
|||
|
||||
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Ой, я неправильно написал, кстати :
Да, это есть - с непривычки. Я сам сначала плевался, прошло несколько месяцев - привык и стал делать мало ошибок.
Пардон, а при доступе просто по индексу по-другому будет? Я написал : доступ по индексам - не особо нужен. Пусть у нас double* ptr стоит в элементе (i,j,k), тогда :
Если долго писать - можно всё заделать в макросы. Если шифт единичный, то вычислительные операции ограничиваются одним лишь сложением, что уже не так ёмко. Например, чтобы в цикле переходить от одного элемента к другому построчно, нужно в цикле прописать ptr++ и всё. В общем, боюсь, это - тема для холиваров. Я - за векторизацию многомерных массивов (имхо, всё просто и чётко), а Вам, видимо, больше нравятся всякие контейнеры. -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
Fazil6, а почему ты заленился везде ставить квадратные скобки? Я бы написал:
Это сообщение отредактировал(а) Ln78 - 3.3.2008, 16:20 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
alex87,
вполне возможно, что твоя задача этого действительно требует, но все-таки подумай: если результат обрабатывается последовательно, его вообще никуда загонять не надо, а если ты по этим данным что-то вычисляешь (или преобразуешь результат), то может быть такое можно сделать специальным запросом sql? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |