omnet ++ free (): неверный указатель, ошибка 134/139

Я работаю над проектом на Omnet ++ и C ++ по моделированию протокола для p2p-сетей, который должен перенастроить их при выходе из узла. Но иногда симуляция вылетает и завершается, и на консоли я читаю: « * glibc обнаружен /opt/omnetpp-4.4/workspace/Progetto/Progetto: free (): неверный указатель: 0x09011e4c ** «

Таким образом, кажется, что free () является проблемой, но единственное освобождение, которое я делаю, это
удалить сообщение после того, как оно было обработано.
Я пытался удалить

delete msg;

но ошибка продолжает происходить.
Итак, как я могу это исправить?
Я не знаю, где это free () называется …

Если кто-то хочет взглянуть на код, он здесь

https://www.dropbox.com/sh/jdrqrt93qazn4xd/ae-qVqgzEF

ОБНОВИТЬ:
Я только что попытался запустить свой проект (имя которого ./Progetto) с помощью Valgrind, используя следующую команду, которую я нашел в руководстве:

valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-    fds=yes ./Progetto > log.txt

Я скопировал журнал в partebin, и вы можете прочитать его здесь:

http://pastebin.com/KBWLE2jV

Я не могу понять этот журнал, и почему проект не падает, если запущен с помощью valgrind?
Единственная проблема, которую я вижу, состоит в том, что проект падает, когда узлы отправляют сообщения себе по scheduleAt () …

0

Решение

Бесплатный, но краткий обзор кода 🙂

эта структура:

struct secondNear {
char near[8];
char nearOfNear[8];
};

может быть источником многих ошибок … почему бы не использовать std::string ?

затем:

            secondNear* sn = new secondNear();
strcpy(sn->near, received->getSender());
strcpy(sn->nearOfNear, received->getNear());
this->near2.push_back(*sn);

опять-таки сильно усложняется помимо того, что утечка памяти. Не нужно создавать новую структуру в куче, просто используйте стек.

А теперь ваша ошибка: я думаю, что вы получаете много cModule наберите понтер через getSubModule() а потом ты free() их вместо delete… они чувствуют себя классами (по крайней мере, в зависимости от их использования), поэтому, возможно, они создаются с помощью new и не Xalloc()

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]