Ошибка сегментации возникает, если используется указатель функции.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка сегментации возникает, если используется указатель функции.

Сообщение Anonymous »

Исходный код воспроизведен ниже. Связанный список выделяется, отображается и позже освобождается. Количество узлов определяется на основе случайного включающего диапазона (2,5).
На основе отладки с использованием gdb ошибка сегментации возникает в main() после строки, вызывающей метод func() с использованием выхода указателя функции. Кроме того, ошибка сегментации возникает только в том случае, если количество узлов в LL равно максимальному значению диапазона, равному 5.
Если нужно было закомментировать строку и использовать строку ниже, которая непосредственно вызывает func(), ошибки сегментации нет.
Есть мысли о том, что может быть причиной этого?
TIA
Винод
#include
#include
#include
#include

using std::array;
using std::random_device;
using std::mt19937;
using std::uniform_int_distribution;
using std::cout;
using std::endl;

struct ListNode
{
int val;
ListNode* next;
};

int func()
{
auto genRndNumInRng = [&](int min, int max)->int
{
random_device rd;
mt19937 rng(rd());
uniform_int_distribution uni(min,max);
return(uni(rng));
};

auto mkLL = [&](ListNode** lnPtrPtr, int numElem)->void
{
assert(!*lnPtrPtr);
auto idx = 0;
do
{
lnPtrPtr[idx] = new(ListNode);
lnPtrPtr[idx]->val = genRndNumInRng(0,9);
lnPtrPtr[idx]->next = nullptr;
if(0 < idx)
{
//from 2nd node in the LL onwards
auto prev = idx - 1;
lnPtrPtr[prev]->next = lnPtrPtr[idx];
}
}while(++idx < numElem);
return;
};

auto prntLL = [&](const ListNode* clnPtr)->void
{
assert(clnPtr);
do
{
cout val next;
}while(clnPtr);
cout void
{
assert(lnPtr);
do
{
auto curr = lnPtr;
lnPtr = lnPtr->next;
delete curr;
cout

Подробнее здесь: https://stackoverflow.com/questions/798 ... er-is-used
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»