我用指针和函数创建了这个程序,它应该是一个链表。我一直收到“访问冲突读取位置0xcdcdcded”。在下面的最后部分。我想可能是我下次没有初始化,但我是新手指针,不知道该怎么做。任何帮助是极大的赞赏。
typedef struct temp
{
char name[20];
char telephone[10];
temp *next;
} node;
node* creation1 ()
{
node *NEW = NULL;
NEW = (node*)malloc(sizeof(node));
return NEW;
}
node* creation2 ()
{
node *start= NULL;
node *NEW = creation1();
start= NEW;
return start;
}
node* creation3 ()
{
node *NEW = creation1();
node *current = NULL;
current=NEW;
return current;
}
void consult ()
{
node *NEW= creation1();
node *start= creation2();
node *current = creation3();
int exit;
printf("How many contacts do you wish to add? ");
scanf("%i",&exit);
for(int i=1; i<=exit; i++)
{
NEW = (node*)malloc(sizeof(node));
current->next=NEW;
current = NEW;
fflush(stdin);
puts("NAME: ");
gets(NEW->name);
puts("TELEPHONE: ");
gets(NEW->telephone);
NEW->next=NULL;
}
current=start->next;
int i = 0;
do
{
i++;
current = current->next; //this is where it stops and gives me the access reading violation
}while (current != NULL);
}
int main(int argc, char** argv)
{
consult();
}
答案 0 :(得分:0)
由于这似乎可能是家庭作业,我不想放弃太多,但您的基本问题是您首先使用行node *start= creation2();
创建一个起始节点。在执行的这一点上,start->next
的值是垃圾,可以是任何东西。
然后,在你的for循环中,start
节点根本没有被触及,这意味着start->next
仍然可以是任何东西。
接下来,在第current=start->next;
行中,您将current
设置为start->next
的垃圾值。
然后最后在行current = current->next;
中你解除引用垃圾值并跳转到内存中的随机位置。
通常,如果您有一个指针值(例如start->next
),并且在创建指针时没有设置指针的好值,则应将其设置为{{1} }。然后,在取消引用某个值(使用NULL
运算符)之前,您应该检查->
左侧的变量是否等于->
,如果是,然后不要执行NULL
操作。任何更具体的建议对我来说都很难给出,因为你的代码中没有任何评论来解释应该发生的事情。