简体   繁体   English

EXC_BAD_ACCESS与结构

[英]EXC_BAD_ACCESS with struct

The following code creates an array of structs from 1~9 as vertices, then it accepts the rest that the vertex points at. 下面的代码创建一个从1〜9的结构数组作为顶点,然后接受顶点所指向的其余部分。 For example, if someone enters 1 as a main vertex, he would allow to enter multiple nodes for a graph. 例如,如果某人输入1作为主顶点,那么他将允许输入一个图形的多个节点。 However, I'm currently facing an issue with the third while loop and the last. 但是,我目前面临着第三个while循环和最后一个while循环的问题。 For this part, it should detect that the next is NULL and exit but its giving me an EXC_BAD_ACCESS error. 对于这一部分,它应该检测到下一个为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]);
}

You simply forgot to initialize newItem->next : 您只是忘了初始化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];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM