EXC_BAD_ACCESS 与结构
EXC_BAD_ACCESS with struct
下面的代码创建一个结构数组,从1~9作为顶点,然后它接受顶点指向的其余部分。例如,如果有人输入 1 作为主顶点,他将允许为图输入多个节点。但是,我目前面临第三个 while 循环和最后一个循环的问题。对于这部分,它应该检测到 next 为 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]);
}
你只是忘了初始化 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];
下面的代码创建一个结构数组,从1~9作为顶点,然后它接受顶点指向的其余部分。例如,如果有人输入 1 作为主顶点,他将允许为图输入多个节点。但是,我目前面临第三个 while 循环和最后一个循环的问题。对于这部分,它应该检测到 next 为 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]);
}
你只是忘了初始化 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];