关于稀疏矩阵三元组表的基本操作,代码编译没问题,但是程序总是会被强行停止,不知道为什么?

问题遇到的现象和发生背景

每次调用完转置函数后,程序就会被强行截停。

问题相关代码
#include<stdio.h>
#include<stdlib.h>

#define maxsize 100

typedef  int elemtype;

typedef struct
{
    int row,col;
    elemtype e;
}triple;

typedef struct 
{
    triple data[maxsize];
    int r,c,len; 
}tsmatrix;

int A[6][6]={{0,12,9,0,0,0},{0,0,0,0,0,0},{-3,0,0,0,0,14},{0,0,24,0,0,0},{0,18,0,0,0,0},{15,0,0,-7,0,0}};

void CreateTriple(tsmatrix s)
{
    int i,j;
    s.r=6;
    s.c=6;
    s.len=0;
    for (i=0;i<6;i++)
    {
        for (j=0;j<6;j++)
        {
            if (A[i][j]!=0)
            {
                s.data[s.len].row=i;
                s.data[s.len].col=j;
                s.data[s.len].e=A[i][j];
                s.len++;
            }
        }
    }
}

void PrintTriple(tsmatrix s)
{
    int i;
    if (s.len<= 0)
        printf("三元组表为空!!!\n");
    else
    {
        printf("三元组表如下:\n");
        printf("\t%d\t%d\t%d\n",s.r,s.c,s.len);
        printf("\t===========================\n");
        for (i=0;i<s.len;i++)
            printf("\t%d\t%d\t%d\n",s.data[i].row,s.data[i].col,s.data[i].e);
    }
}

void SumTriple(tsmatrix s)
{
    int sum=0;
    for (int i=0;i<s.len;i++)
    {
        if (s.data[i].row == s.data[i].col)
            sum+=s.data[i].e;
    }
    printf("对角线之和为:%d\n",sum); 
}

void TransposeTriple(tsmatrix s,tsmatrix p)
{
    int cols,t,m,n;
    int num[maxsize],pos[maxsize];;
    p.len=s.len;
    p.r=s.c;
    p.c=s.r;
    if(p.len)
    {
        for(cols=1;cols<=s.c;cols++)
            num[cols]=0;
        for(t=1;t<=s.len;t++)
            num[s.data[t].col]++;
        pos[1]=1;
        for(cols=2;cols<=s.c;cols++)
            pos[cols]=pos[cols-1]+num[cols-1];
        for(m=1;m<=s.len;m++)
        {
            cols=s.data[m].col;
            n=pos[cols];
            p.data[n].row=s.data[m].col;
            p.data[n].col=s.data[m].row;
            p.data[n].e=s.data[m].e;
            pos[cols]++;
        }
        printf("转置成功!!!\n");
    }
}

int main()
{
 int opt,i,j;
 tsmatrix s,p;
 printf("稀疏矩阵如下:\n");
 for(i=0;i<6;i++)
 {
    for(j=0;j<6;j++)
         printf("%-5d",A[i][j]);
     printf("\n");
 }
 while(1)
 {
     printf("        |*==============================*|        \n");
    printf("        |*       稀疏矩阵三元组表       *|        \n");
     printf("        |*==============================*|        \n");
     printf("        |*        1.创建三元组表        *|        \n");
     printf("        |*        2.显示三元组表        *|        \n");
    printf("        |*        3.对角线元素和        *|        \n");
     printf("        |*        4.转置三元组表        *|        \n");
     printf("        |*        0.退出当前系统        *|        \n");
    printf("        |*==============================*|        \n");
    printf("        |*     注:按要求输入菜单号     *|        \n");
    printf("        |*==============================*|        \n"); 
     printf("         请输入要进行的功能编码(0~4):");
     scanf("%d",&opt);
     getchar();
     switch(opt)
     {
         case 1:    
                 CreateTriple(s);
                 printf("创建成功!!!\n");
                break;
         case 2:    
                 PrintTriple(s);
                break;    
         case 3:
                 SumTriple(s);
                break;
         case 4:
                 TransposeTriple(s,p);
                 PrintTriple(p);
                 break;
         case 0:system("cls");exit(0);break;
         default:printf("数据错误!请输入0~4之间的整数!\n");break; 
    }
 }
}


运行结果及报错内容

img