У меня есть простая структура связанного списка, называемая node, массив головных узлов, функция connectedListManage и функция addNode, однако я был бы признателен за помощь в диагностике проблемы с ошибками сегмента, которую я не понимаю.
Я проследил проблему при добавлении узлов в оператор main:
while(1) linkedListManage(*heads);
Хотя указатель на заголовки включен, я получаю segfault всякий раз, когда добавляю второй элемент (никогда не первый) к любому связанному заголовок списка, который хранится в ODD INDEX (никогда не возникает проблем с четным индексом) в моем массиве заголовков связанных списков. Я проверил это с размером массива 20 для головы, и проблема все еще сохраняется, чтобы влиять только на нечетные индексы.
Однако, когда я удаляю указатель на головы:
while(1) linkedListManage(heads);
это устраняет ошибку segfault и позволяет моим спискам правильно добавляться, но затем выдает 2 предупреждения:
main.c:42:27: warning: incompatible pointer types passing 'node *[2]' to parameter of type
'node *' (aka 'struct node_t *') [-Wincompatible-pointer-types]
while(1) linkedListManage(heads);
^~~~~
main.c:27:27: note: passing argument to parameter 'heads' here
void linkedListManage(node* heads){
Ниже приведена моя программа, я действительно хотел бы знать, что вызывает эту проблему, чтобы я мог узнать больше о любой проблеме указателя, это случается, и поэтому я могу прекратить получать предупреждения. Я полностью озадачен тем, почему эта проблема будет появляться только по нечетным индексам.
#include <stdio.h>
#include <stdlib.h>
typedef struct node_t{
int data;
struct node_t* next;
} node;
void addNode(node* a){
int userInput;
node* current = a;
printf("Enter value: ");
scanf("%d", &userInput);
if (!current->data) current->data = userInput;
else {
while(current->next) current = current->next;
node* newNode = (node*)malloc(sizeof(node));
newNode->data = userInput;
current->next = newNode;
}
}
void linkedListManage(node* heads){
int userInput;
printf("Enter ID of list:\n");
scanf("%d", &userInput);
addNode(&heads[userInput]);
}
int main(){
node* heads[2];
heads[0] = (node*)malloc(sizeof(node));
heads[1] = (node*)malloc(sizeof(node));
while(1) linkedListManage(heads);
return 0;
}