Исходный код воспроизведен ниже. Связанный список выделяется, отображается и позже освобождается. Количество узлов определяется на основе случайного включающего диапазона (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
Ошибка сегментации возникает, если используется указатель функции. ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1765773419
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79847391/segmentation-fault-ensues-if-function-pointer-is-used[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия