Что может вызвать сбой возвращаемой функции? C ++ - PullRequest
4 голосов
/ 15 января 2011

Итак, я отлаживал эту ошибку уже несколько часов. Я пишу программу, использующую Ogre3d, релевантную только потому, что она не загружает символы, поэтому она не позволяет мне составлять трассировку, что еще больше затрудняет поиск места аварии. Итак, напишите, прежде чем вызывать конкретную функцию, я распечатываю «Запуск», затем вызываю функцию и сразу после того, как печатаю «Остановка». Во всей функции я печатаю буквы AF, где F печатается непосредственно перед возвратом функции (на одну строку выше последнего '}'). Странно то, что происходит сбой, это происходит после того, как напечатано 'F', но нет 'Остановка ». Значит ли это, что где-то между ними происходит сбой? Единственное, о чем я могу думать, это что-то не так во время освобождения части памяти, выделенной во время функции. У меня никогда ничего подобного не происходило, я буду продолжать проверять, чтобы убедиться, что все идет не так, как я думаю.

Ответы [ 3 ]

4 голосов
/ 15 января 2011

В большинстве случаев, когда происходит что-то странное и непонятное, это происходит из-за чего-то другого.

В вашем коде может быть несколько висячих указателей (даже вдалииз этой функции), указывая на некоторые случайные ячейки памяти.

Возможно, вы использовали такой висячий указатель, и это могло бы привести к перезаписи некоторых необходимых вам ячеек памяти.Результатом этого является то, что вы изменили поведение вашей программы, изменив некоторую переменную, определенную в другом месте, некоторые константы или даже некоторый код!

Я бы предложил вам отладить ваше приложение, используя какой-либо инструмент, способный проверять исообщать об ошибочных обращениях к памяти, например Valgrind .


В любом случае, если вы сможете локализовать источник вашего сбоя и написать действительно небольшой фрагмент кода, который вылетит, опубликуйте его здесь- это может быть простой ошибкой в ​​вашей функции, хотя это кажется маловероятным из вашего описания.

2 голосов
/ 15 января 2011

Это вероятно означает, что ошибка происходит, когда функция возвращается и какой-то деструктор срабатывает. Скорее всего, у вас есть деструктор, пытающийся освободить память, которой он не владеет, или записывающий конец некоторого буфера в журнал и т. Д.

Другая возможность, о которой следует знать, может появиться, если вы не очищаете выходной поток. Возможно, что «Остановка» печатается, но буферизируется перед нажатием stdout. Обязательно проверьте это, так как если это происходит, вы лаете не на то дерево.

0 голосов
/ 11 июня 2018

У меня была похожая проблема, и оказалось, что моя функция ничего не возвращала, когда подпись ожидала возвращаемый тип std :: shared_ptr, хотя я нигде не использовал возврат.функция имела следующую подпись:

std::shared_ptr<blDataNode> blConditionBasedDataSelectionUI::selectData(std::shared_ptr<blDataNode> inputData)
{
    // My error was due to the function
    // not returning anything
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...