| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Debug Assertion Filed |
| Автор: Karen_ 27.5.2008, 19:54 | ||||||
| может быть есть темы этого типа, но если не трудно не удалите и если кто может помогите есть у меня класс, в котором у меня обявлен массив:
в классе есть функции которые инициализируют эту матрицу: потом в main-е с помощью обйекта получаю матрицу, скажем так:
потом копирую в B матрицу A таким образом
этот somefunction в B скажем находит число нулевих элементов, потом редактирует матрицу A, то есть вычитвыает из всех эелемнтов минимальный эелемнт, и так до тех пор пока не находит скажем N нулей: если размер матрицы A меньше 10, то вроди бы все делается нормально но если размер больше 10, во время работы выдает ошибку: Debug Assertion Filed File Dbgheap.cpp line 346 Expression CrtCheckMemory() есть кноки Abort Retry Ignore если нажать на Ignore То прога почти всегда доходит до конца и выдает результаты: потом ошибку, бывает и так что без ошибки завершает работу: как исправить прогу? |
| Автор: Rififi 27.5.2008, 20:01 |
поскольку код у тебя секретный, то сказать что-то конкретное сложно... переписать кривизну по-нормальному? |
| Автор: bsa 27.5.2008, 20:16 |
| Karen_ Это сообщение скорее всего значит, что ты вышел за границы массива (т.е. обратился к 11-му элементу массива, в котором всего их 10). |
| Автор: Karen_ 27.5.2008, 20:17 | ||
| код не секретный просто он очень большой, почти 1000 строк: вот тот отрезок где копирую матрицу в другую, и отыскиваються те места где пересикаються множества в которых есть все нулевые элементы(просто не хотел писать все это чтобы не усложнить вопрос)
|
| Автор: Rififi 27.5.2008, 21:28 | ||||||||
| - не показана самая интересная часть - создание и уничтожение массива указателей A - начни уже потихоньку юзать STL. например эта телега:
(кстати, почему возвращается int? или число плюсов может быть отрицательным?) записывается так:
а учитывая, что размерности массивов у тебя - константы, большинство проверок можно делать в compile-time, причём без использования глобальных переменных вообще (которые - зло, и юзаются только ламерами).
- стоит подумать о том, чтобы хоть как-то ловить выход за пределы массива (сейчас никакого контроля нет вообще) хотя бы так:
или дополнительный класс(ы), чтобы сохранить текущий синтаксис. в общем, работать есть над чем. Добавлено через 1 минуту и 53 секунды и эта. не стесняйся пользоваться пробелом в коде, не экономь байты. |
| Автор: Karen_ 27.5.2008, 21:52 | ||||
вот так создаю матрицу A
а так в деструкторе удаляю
|
| Автор: Rififi 27.5.2008, 22:07 |
| код выглядит корректным. если сообщение появляется во время работы, значит память портится на какой-то итерации. начни добавлять трассировку (printf/file io) (чем дальше - тем больше) и дампить на экран/файл все важные значения. продолжать до тех пор, пока результаты трассировки не разойдутся с ожидаемыми, после чего локализовать ошибку и исправить её. |
| Автор: Karen_ 27.5.2008, 22:15 |
| огромное спасибо, постараюсь. и еще, в разных компиляторах ошибка выдает по разному. например в Visual Studo 7, во время работы постоянно выдает ошибку, который я уже написал, в Visual Studio 2005, почти всегда программа работает до конца выдает результаты, а потом уже ошиби: в GCC(под Linux) вроди бы работает нормально , пишет результаты, после нажатия Enter пишет Segmentation fault, Core dumped |
| Автор: bsa 27.5.2008, 22:36 | ||
|