Это распространенная ошибка, и вы действительно должны попытаться научиться использовать инструмент отладки.
Насколько я вижу, вы не проверяете, существует ли p->next
или нет, прежде чем получить к нему доступ. Если это NULL, это будет неопределенное поведение, и вы получите ошибку сегментации. Если это случайное значение, вы должны соответствующим образом инициализировать свою структуру при выделении памяти, в этом случае next
в NULL.
Добавив эти несколько строк, вы должны быть в безопасности.
if (p != NULL) {
if (p->next != NULL) {
char **pipedP = p->next->pgmlist; // I'm the line where the seg fault occurs.
return pipedP;
}
}
Несколько советов,
- Когда вы выделяете память для структуры, установите для нее значение 0 (т. Е.
memset(mem, 0, sizeof mem)
) - При обращении к указателю всегда проверяйте, имеет ли он значение NULL илинет, в противном случае вы бы сгенерировали ошибку сегментации, как здесь
- Когда ваша программа была убита, вы можете отследить, почему ваша система ее убила, с помощью
coredumpctl gdb
(она примет последний дамп, сгенерированный на вашем компьютере, иположи его на gdb для отладки)