EXC_BAD_ACCESS со структурой - PullRequest
0 голосов
/ 22 октября 2018

Следующий код создает массив структур из 1 ~ 9 в виде вершин, затем принимает остальное, на которое указывает вершина.Например, если кто-то введет 1 в качестве главной вершины, он позволит ввести несколько узлов для графа.Однако в настоящее время я сталкиваюсь с проблемой третьего цикла while и последнего цикла.Для этой части он должен обнаружить, что следующим является NULL, и завершиться, но это дает мне ошибку EXC_BAD_ACCESS.

#include <stdio.h>
#include <stdlib.h>

struct node{
    int data;
    struct node* next;
};

int main(){
    struct node *G[10];
    for (int i = 1; i < 10; i++)
    {
        G[i]= malloc(sizeof(struct node));
        G[i]->data = i;
        G[i]->next = NULL;
        printf("%i\n", G[i]->data);
    }
    int input = 10;
    int vertixBeingModi=1;
    printf("Please enter your vertix you want to modify? \n");
    scanf("%i", &vertixBeingModi);
    while(vertixBeingModi != 0){
        while (input != 0){
            printf("Please enter the edges ? \n");
            scanf("%i", &input);
            struct node* cursor;
            struct node* newItem;
            cursor = G[vertixBeingModi];
            if (input == 0){
                break;
            }
            while(cursor->next != NULL )
            {
                cursor = cursor->next;
            }
            newItem = malloc(sizeof(struct node));
            cursor->next = newItem;
            newItem->data = input;
            cursor = G[vertixBeingModi];
        }
        printf("Please enter your vertix you want to modify? \n");
        scanf("%i", &vertixBeingModi);
        input = 1;
        if (vertixBeingModi == 0){
            break;
        }
    }
    int array[10];
    struct node* tempDegree;
    int counter = 0;
    for(int x = 1; x < 10; x++){
        tempDegree = G[x];
        if(tempDegree->next == NULL){
            continue;
        }else{
            while(tempDegree->next != NULL ){
                counter = counter + 1;
                tempDegree = tempDegree->next;
            }
            array[x] = counter;
            counter = 0;
        }
    }
    printf("%d\n", array[1]);
}

1 Ответ

0 голосов
/ 22 октября 2018

Вы просто забыли инициализировать newItem->next:

while (cursor->next != NULL)
  {
    cursor = cursor->next;
  }
  newItem = malloc(sizeof(struct node));
  newItem->next = NULL;    // <<<<<<<<<<<< add this line
  cursor->next = newItem;
  newItem->data = input;
  cursor = G[vertixBeingModi];
...