首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请大神来帮小弟我看上指针的有关问题。调释没有有关问题,运行有异常。感觉逻辑应该没有有关问题。可是。(绝对不是作业题目。)

2013-03-16 
请大神来帮我看下指针的问题。调释没有问题,运行有错误。感觉逻辑应该没有问题。可是。(绝对不是作业题目。)。#i

请大神来帮我看下指针的问题。调释没有问题,运行有错误。感觉逻辑应该没有问题。可是。(绝对不是作业题目。)。

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
struct Length
{
char name[20];
char phone[20];
struct Length *next;
struct Length *previous;
};
int sll_daxiao(struct Length *xiao,struct Length *da);
int sll_charu(struct Length *xian,struct Length *hou);
int main(void)
{
struct Length *current = NULL;
struct Length *first = NULL;
struct Length *last = NULL;
char test = '\0';
for(;;)
{
printf("请问是否能填写电话簿请选择(Y or N):");
scanf(" %c",&test);
if(tolower(test) == 'n')
break;
current = (struct Length*)malloc(sizeof(struct Length));
if(current = NULL)
{
continue;
}
if(first == NULL)
{
first = current;
current ->previous =NULL;
}
else
{
last ->next = current;
current ->previous = last;
}
printf("请输出想填写电话人的姓名:");
scanf("%s",current ->name);
printf("请输入%s的电话号码:",current ->name);
scanf("%s",current ->phone);
current ->next = NULL;
last = current;
}
current = first;
while(current != NULL)
{
if(!(sll_charu(current,current->next)))
{
current = current ->next;
continue;
}
else
current = current ->next;
}
current = first;
while(current != NULL)
{
printf("\n%s的电话号码是%s\n",current->name,current->phone);
last = current;
current = current ->next;
}
current = last;
while(current !=  NULL)
{
printf("\n%s的电话号码是%s\n",current->name,current->phone);
last = current;
current = current ->previous;
free(last);
}
return 0;
}
int sll_daxiao(struct Length *da,struct Length *xiao)
{
if(strcmp(da->name,xiao->name)<0)
return TRUE;
else
return FALSE;
}
int sll_charu(struct Length *xian,struct Length *hou)
{
struct Length *first;
struct Length *last;
if(hou ==NULL || xian == NULL )
return 0;
last = hou -> next;
if(xian->previous != NULL)
{
first = xian ->previous;
}
if(sll_daxiao(xian,hou))
{
first ->next = hou;
hou -> next =xian;
xian ->next = last;
last ->previous = xian;
xian -> previous = hou;
hou ->previous = first;
return 1;
}
return 0;
}

 //题目是要求存储手机号码和个人姓名。 按姓名的大小排序。利用链表。
 //感觉逻辑应该没有错。。可是。。- -  请大神来帮我指出错误。最好给一些标准代码。。谢谢。。
  struct
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。


热点排行