关于线性表的超级菜鸟有关问题

关于线性表的超级初学者问题
#include <stdio.h> 
#include <stdlib.h>
#include"malloc.h"

#define list_init_size 10000
#define LISTINCREMENT 10
 
typedef int ElemType; 

typedef struct 

ElemType *elem; 
int length; 
int listsize;
int last;
}sqlist; 

int initlist_sq(sqlist &l){ //建立空的线性表
l.elem=(int * )malloc(list_init_size*sizeof(int)); 
if(!l.elem)return 0; 
l.length=0; 
l.listsize=list_init_size; 
return 1; 
}


int merge(sqlist A,sqlist B,sqlist *c) //把A,B表放入表中并保持有序
{int i,j,k; 
i=0;j=0;k=0; //记数
while ( i<=A.last &&j<=B.last) 
if (A.elem[i]<B.elem[j]) 
c->elem[k++] = A.elem[i++]; 
else 
c->elem[k++] = B.elem[i++]; 
while (i<=A.last) 
c->elem[k++] = A.elem[i++]; 
while (j<=B.last) 
c->elem[k++]=B.elem[j++]; 
c->last=k-1; 
return 1;
}


void main()
{sqlist l,m,n; //创造三个线性表l,m,n

 int e=0;
initlist_sq(l);
initlist_sq(m);
printf("请输入线性表1长度:");
scanf("%d",&l.length); 
printf("请输入所需的数据:");
for(int j=0;j<l.length;j++) 
scanf("%d",&l.elem[j]); 
printf("请输入线性表2长度:");
scanf("%d",&m.length); 
printf("请输入所需的数据:");
for(int k=0;k<l.length;k++) 
scanf("%d",&m.elem[k]); 
merge(l,m,&n); //这样调用是否正确???
for(int q=0;q<l.length+m.length;q++)
printf("%d ",n.elem[q]);
}

执行程序并执行到输入线性表2的数据时出现主函数错误,不知道是什么错误,麻烦大虾们指点下`~
PS:小弟刚刚学数据结构,很多东西都不太清楚




------解决方案--------------------
/*错误很多,看来你编程缺乏耐心,这是我改后的程序,你看看吧,c++编译才能运行!!!*/
#include <stdio.h >
#include <stdlib.h > 
#include"malloc.h" 

#define list_init_size 10000 
#define LISTINCREMENT 10 
  
typedef int ElemType;

typedef struct
{
ElemType *elem;
int length;
int listsize; 
int last; 
}sqlist;

int initlist_sq(sqlist &l){ //建立空的线性表 
l.elem=(int * )malloc(list_init_size*sizeof(int));
if(!l.elem)return 0;
l.length=0;
l.listsize=list_init_size;
return 1;


 //我把n当成函数返回值给传回去的,你也可以不要返回值,把n定义成全局的变量 
sqlist merge(sqlist A,sqlist B,sqlist *c) //把A,B表放入表中并保持有序 
{
int i,j,k;
i=0;j=0;k=0; //记数 
while ( i <A.length &&j <B.length) //你这里用的A.last都没初始化就用,length和last值相同没必要记录两次 
if (A.elem[i] <B.elem[j])
c->elem[k++] = A.elem[i++];
else
c->elem[k++] = B.elem[j++]; //用j记录B表,原来的程序你用的是i表示的,马虎!!! 
while (i <A.length) //last我都改成length了 
c->elem[k++] = A.elem[i++];
while (j <B.length)
c->elem[k++]=B.elem[j++];
c->last=k-1;
return *c; 



int main() 
{
//你在这定义的n它是局部的,上面的函数对他不可见,要么把它定义成全局的,要么把它当成函数返回值,否则你白忙活 
sqlist l,m,n; //创造三个线性表l,m,n 

 int e=0; 
initlist_sq(l); 
initlist_sq(m);
initlist_sq(n);
printf("请输入线性表1长度:"); 
scanf("%d",&l.length);
printf("请输入所需的数据:"); 
for(int j=0;j <l.length;j++)
scanf("%d",&l.elem[j]);
printf("请输入线性表2长度:"); 
scanf("%d",&m.length);
printf("请输入所需的数据:");