user-0 提问: 线性表操作的实现中建立顺序表时显示windows停止运行

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: Windows已停止说明，运行发生了严重的运行时错误，例如除零，数组越界，段错误等等。从你的情况来看，很可能是指针操作的问题，这一检查指针操作是否合法

user: user-0
content: 好的，不过我又改了另一个 代码是正确的，如下 #include <stdio.h> #include<stdlib.h> #define maxsize 50 typedef struct { int data[maxsize]; int last; }Sequenlist;  Sequenlist * InitList () //创建顺序表 { Sequenlist * L ; L= (Sequenlist *) malloc( sizeof(Sequenlist) ); L->last =0; return(L); }  Sequenlist * creat() //创建一个有具体内容的顺序表 { Sequenlist * L; int i=1,n; L=InitList( ); printf("请插入数据,以0结束\n"); scanf("%d",&n); while(n!=0 && L->last<maxsize) { L->data[i]=n; i=i++; L->last++; scanf("%d",&n); } return(L); } int Length (Sequenlist * L) //求表的长度 { return (L->last); }  int GetData (Sequenlist * L, int i ) //获取第i个元素 { if ( i >=1 && i <=L->last) return (L->data[i]); else { printf ("参数 i 不合理！\n"); return 0; }  } int Find (Sequenlist *L, int x ) // 查找元素x { int i=1; while ( i <=L->last && L->data[i] != x ) i++; if ( i <=L->last ) return (i); else return (0); } int Insert ( Sequenlist * L, int x, int i ) //在某一位置插入数据 { int j; //在表中第 i 个位置插入新元素 x if (i < 1|| i > L->last +1|| L->last == maxsize) return 0; //插入不成功 else { for ( j=L->last; j >=i; j-- ) { L->data[j+1] = L->data[j]; } L->data[i] = x; L->last++; return 1; //插入成功 } } int Delete ( Sequenlist *L, int i ) //删除某一位置的数据 { //在表中删除节点i int j; if ( i <1 || i >L->last) return 0; for ( j=i+1; j <=L->last; j++ ) L->data[j-1] =L->data[j]; L->last=L->last -1; return 1; //成功删除  } void print(Sequenlist *L) //打印函数 { int i; for(i=1;i<=L->last;i++) printf("%d\n",L->data[i]); }  void main() {     int length,i;     int value,number,location;     int j,k,m;     int flag;     Sequenlist * L ;     do {         printf("\n======================================"); 		printf("\n"); 		printf("\n     0. 初始化线性表 " ); 		printf("\n"); 		printf("\n     1. 建立线性表 " ); 		printf("\n     2. 在i位置插入元素e"); 		printf("\n     3. 删除第i个元素，返回其值"); 		printf("\n     4. 查找值为 e 的元素"); 		printf("\n     6. 结束程序运行"); 		printf("\n======================================"); 		printf("\n    请输入您的选择（0，1，2，3，4，6）"); 		scanf("%d",&m); 		switch(m) 		{ 			case 0:{ 			    Sequenlist * InitList (); 				  printf("ok\n"); 			   } 				break; 			case 1:{ L=creat();                     length=Length(L);                     printf("The length is %d\n",length);                     printf("Please input the location\n");                     scanf("%d",&location);                     value=GetData(L,location);                     printf("The number is %d\n",value); 		      } 				break; 			case 2:{ 				printf("Which place do you want to insert?\n"); //插入功能                 scanf("%d",&j);                 printf("Please input the number\n");                 scanf("%d",&number);                 flag=Insert(L,number,j);                 if(flag==0)                 printf("Failing to insert!\n");                 else                 {                     printf("Done!\n");                     print(L);                 } 		      } 				break; 			case 3:{ 				printf("Which place do you want to delete?\n"); //删除功能                 scanf("%d",&k);                 flag=Delete(L,k);                 if(flag==0)                 printf("Failing to delete!\n");                 else                 { printf("Done!\n");                 print(L);                 } 		      } 				break; 			case 4:{ 				printf("Which number do you want to find?\n"); //查找功能                 scanf("%d",&i);                 value=Find(L,i+1);                 if(value!=0)                 printf("The location is %d\n",value);                 else                 printf("There is no such number!\n"); 				break; 			} 	   } /*  switch  */      }while(m!=6);     printf("\n               再见！"); 	printf("\n          打回车键，返回。");   }引用

user: user-3
content: 引用 3 楼 shanghj-的回复:那个，这两个问题改了，可是还是不行。 在调试模式下运行程序，出错了点中断，通过调用堆栈等窗口观察分析原因

user: user-0
content: 那个，这两个问题改了，可是还是不行。

user: user-3
content: InitList_Sq函数返回的类型也不应该是int*

user: user-3
content: ListDelete_Sq( &a,  i, e);  改成  ListDelete_Sq( &a,  i, &e);