Я записал моей собственной ссылке считаемый C++ диспетчера памяти (для забавы), и я уверен, что это не прекрасно ;). И теперь когда я пытаюсь использовать его, я получил случайные сигналы SIGTRAP. Если я комментирую каждую строку, которые являются в связи с тем диспетчером памяти, все хорошо работает. Получение SIGTRAP-s вместо SIGSEGV является довольно странным. Я знаю, что SIGTRAP-s брошены, когда программа поражает точку останова, но никакая точка останова не установлена. Я читал в другом потоке, которые отлаживают сборки exe's, и dll's должен быть актуальным. Они актуальны и таким образом, это не причина.
Кто-либо знает, почему это происходит?
После поиска в Google я понял, что эти сигтрапы такие же, как и предупреждения, которые вы получаете в MSVC ++: «Windows вызвала точку останова в xxxx.exe. Это может быть связано с повреждением. кучи, и указывает на ошибку blahblahblah "...
Кажется, да, неожиданные сигтрапы могут указывать на повреждение памяти (довольно странно ...)
И я тоже обнаружил свою ошибку. MM находится в статической библиотеке, которая связана с dll. И эта статическая библиотека и dll связаны с моим exe. Итак, было два менеджера памяти, один в моем exe и один в моей dll. Если вызвать метод инициализации MM. Он инициализировал MM в моем exe, но не в dll, поэтому dll прошла без init. Я решил это, не связав свой exe с этой статической библиотекой.
Я использую cancelBubble = true
и stopPropagation ()
в обработчиках перемещения.
Возможно, лучшим решением будет добавление дополнительного столбца, который автоматически набор для 1 в каждой строке. Как только имеется элемент, не имеющий значения NULL, измените его на 0.
Затем
If(drEntitity.rows[i].coulmn[8] = 1)
{
dtEntity.Rows.Add(drEntity);
}
else
{
//don't add, will create a new one (drEntity = dtEntity.NewRow();)
}
-121--239073- Я бы предположил, что вы, возможно, называете несовпадающие новые/удаленные или malloc/свободные реализации - Так что-то было выделено вашим менеджером памяти, но когда память освобождена, вы заканчиваете со стандартной реализацией delete/free.
Установите точку останова в сигнале и проверьте, есть ли в стеке свободное удаление () или удаление оператора и является ли это реализацией указанной функции, которую вы ожидаете.