У меня есть один размерный массив указателей, который я использую для хранения головок связанных списков. Я заявляю это и заполнить эти заявленияОшибка сегментации в копировании заголовка связанного списка
struct node { long int val; struct node *next; }; //Our node structure
struct node **pointArray;
pointArray = malloc(size_Of_array * sizeof(struct node *));
for (z =0; z<sizeof(pointArray); z++)
pointArray[z] = NULL;
/*
do something else
...
...
*/
while(numRead <= bytesPerThread) //loop1
{
m = read(fd, buff, sizeof(buff));
numRead += m;
if (m < 0)
handle_error("Read error\n");
else
{
for (i=0; i< m; i++) //loop2
{
if (buff[i] == '#')
while(buff[i] != '\n')
{
i++;
continue;
}
else //else 2
{
if(buff[i] !=' ' && buff[i]!='\n' && buff[i] !='\t')
{ temp[a] = buff[i];
a++;
}
else //else 1
{ Node = atoi(temp);
a = 0;
for (x=0; x< 15; x++)
temp[x] = '\0';
if ((buff[i] == ' ' || buff[i] == '\t') && curruntNode == -1)//just for first time
{
head = (struct node*) malloc(sizeof(struct node));
head->val = Node; //create first node, i.e. head
head->next = NULL;
current = head; //Set current node to head
pthread_mutex_lock(&myLock);
pointArray[Node] = head;
pthread_mutex_unlock(&myLock);
curruntNode = Node;
} else
if (buff[i] == '\n')
{
temp2 = (struct node*) malloc(sizeof(struct node));
temp2->val = Node;
temp2->next = NULL;
current->next = temp2;
current = temp2;
} else
if ((buff[i] == '\t' || buff[i] ==' ') && curruntNode != Node)
{head = (struct node*) malloc(sizeof(struct node));
head->val = Node; //create first node, i.e. head
head->next = NULL;
current = head; //Set current node to head
pthread_mutex_lock(&myLock);
if (pointArray[Node] == NULL)
{
pointArray[Node] = head;}
else
{
current = pointArray[Node];
while (current->next != NULL)
{
current = current->next;
}
current->next = head;
current = head;
}
pthread_mutex_unlock(&myLock);
curruntNode = Node;}
Тогда я объявляю указатели искать в каждом связанном списке
for (j = NodesToSeek; j < NodesPerThread; j++)
{printf("hee");
if (pointArray[j] == NULL)
{printf("Null");continue;}
else
{
firstNode = pointArray[j];
printf("1node %ld",firstNode->val);
firstNode = firstNode ->next;
while (firstNode != NULL)
{
move = firstNode;
while (move != NULL)
{
comparedNode = pointArray[firstNode->val];
comparedNode = comparedNode->next;
while (comparedNode != NULL)
{
if (comparedNode->val == move->val)
{
pthread_mutex_lock(&myLock);
tringles++;
pthread_mutex_unlock(&myLock);
}
comparedNode = comparedNode->next;
}//end while
move = move->next;
}//end while
firstNode = firstNode->next;
}//end while
}//end else
}//en
Проблема возникает в этом заявлении
comparedNode = comparedNode->next;
Этот указатель остается нулевой Может ли кто-нибудь сказать мне, почему это происходит?
Они не имеют смысла: 'head-> Вэл = Node;', 'pointArray [Node] == NULL' и т.д. Где/что такое определение' Node'? –
это int. У меня есть число узлов, у каждого из которых есть список смежности, поэтому мне нужно ссылаться на номер узла как индекс одномерного массива –