kea |
Отправлено: 06.01.2006, 00:50 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
Здравствуйте!
Работаю с битовым вектором на 16 бит.
_M_offset для _M_start имеет значение 0
_M_offset для _M_finish имеет значение 16.
Перед появлением ошибки параметры принимают следующие значения:
Bits={_M_start:{_M_p::00D7EFAC, _M_offset:13974884},
_M_finish:{_M_p::00D7F030, _M_offset:13977060},
_M_end_of_storage:{_M_data::00DDA7A0}}
(строчку записал по подсказке tooltip expression evaluation).
Как определить в каком месте программы происходит ошибка?
Может быть, кто назовет сходу возможные(!) причины появления таких значений смещений.
Ошибка происходит не сразу после запуска, а на 8-ой итерации работы. |
|
Admin |
Отправлено: 09.01.2006, 09:53 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
_M_offset для _M_finish имеет значение 15 ?
Отредактировано Admin — 09/01/2006, 09:55
|
|
kea |
Отправлено: 25.01.2006, 01:04 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
QUOTE (Admin @ 09/01/2006, 09:53) | _M_offset для _M_finish имеет значение 15 ? |
Здравствуйте! __M_offset для _M_finish имеет значение 16. |
|
kea |
Отправлено: 25.01.2006, 01:18 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
Здравствуйте! Думается надо сделать пояснения. Работаю с параметризованным контейнером. Вопрос о методе выделения памяти для элементов этого контейнера уже задавал, там приводил описание его класса.
Объектами у меня могут быть C1, содержащий две переменных int P1 и int P2 и битовый вектор vector bv размера P1*P2. C2 содержит переменную int P1 vector dv размера P1.
Создаю контейнер с элементами C2, затем создаю контейнер с элементами C1 предварительно удаляя перед этим контейнер с C2.
Затем создаю контейнер снова C2 и при удалении C1 возникает крах системы. Просматриваю значение bv перед крахом (в деструкторе перед вызовом опреатора clear() для bv
для _M_start и _M_finish _M_offset имеет значение 0. |
|
** Admin |
Отправлено: 25.01.2006, 17:22 |
|
Не зарегистрирован
|
Я не вникал в суть, не разбирался с кодом, имел ввиду другое.
Если элементов — 16 (например бит), и первый начинается с нуля,
то последний элемент будет иметь индекс 15, а не 16.
А 16 — уже сдвинитесь на область памяти, занятую чем то еще,
и можете получить AV. |
|
kea |
Отправлено: 25.01.2006, 19:17 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
QUOTE (** Admin @ 25/01/2006, 17:22) | Если элементов — 16 (например бит), и первый начинается с нуля,
то последний элемент будет иметь индекс 15, а не 16.
А 16 — уже сдвинитесь на область памяти, занятую чем то еще,
и можете получить AV. |
Здравствуйте! Показывает именно 16. Даже если просто создать вектор vector bv(16). Что такое AV? |
|
Георгий |
Отправлено: 26.01.2006, 00:01 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Acces Violation |
|
Boyko |
Отправлено: 31.01.2006, 10:11 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (** Admin @ 25/01/2006, 16:22) | Я не вникал в суть, не разбирался с кодом, имел ввиду другое.
Если элементов — 16 (например бит), и первый начинается с нуля,
то последний элемент будет иметь индекс 15, а не 16.
А 16 — уже сдвинитесь на область памяти, занятую чем то еще,
и можете получить AV. |
Я тоже не вникал в суть.
В STL всегда так, finish показывает не последнего элемента, а следующий его элемент |
|
kea |
Отправлено: 06.02.2006, 15:22 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
Здравствуйте! В поиске ошибки помогло использование функции at() вместо оператора [] при обращении к элементам вектора.
Спасибо всем за советы! |
|