C程序输出没有完成就截至了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
    int array[5][6];
    srand(time(NULL));
    for(int n=0;n<=4;n++)
    {
        for(int m=0;m<=5;m++)
        {
            array[n][m]=rand()%100;
        }
    }
    printf("改变前的矩阵:");
    for(int m=0;m<=4;m++)
    {
        printf("\n");
        for(int n=0;n<=5;n++)
        {
            printf("%d\t",array[m][n]);
        }
    } 
    for(int m=0;m<=4;m++)                                        /*行排序*/ 
        {
        
            for(int n=0;n<=5;n++)
            {
                int temp1=array[m][n];
                int temp2=array[m][n];
                int p,q;
                for(int i=n;i<=5;i++)
                {
                    if(temp1>array[m][i])
                    {
                        temp1=array[m][i];
                        p=i;
                    }
                }
                array[m][n]=temp1;
                array[m][p]=temp2;
                
            }
        }
    
    for(int m=0;m<=5;m++)                                        /*列排序*/ 
        {
        
            for(int n=0;n<=4;n++)
            {
                int temp1=array[n][m];
                int temp2=array[n][m];
                int p,q;
                for(int i=n;i<=4;i++)
                {
                    if(temp1>array[i][m])
                    {
                        temp1=array[i][m];
                        p=i;
                    }
                }
                array[n][m]=temp1;
                array[p][m]=temp2;
                
            }
        }
        for(int m=0;m<=4;m++)                                        /*行排序*/ 
                {
                
                    for(int n=0;n<=5;n++)
                    {
                        int temp1=array[m][n];
                        int temp2=array[m][n];
                        int p,q;
                        for(int i=n;i<=5;i++)
                        {
                            if(temp1>array[m][i])
                            {
                                temp1=array[m][i];
                                p=i;
                            }
                        }
                        array[m][n]=temp1;
                        array[m][p]=temp2;
                        
                    }
                }

    printf("\n改变后的矩阵:");
    for(int m=0;m<=4;m++)
            {
                printf("\n");
                for(int n=0;n<=5;n++)
                {
                    printf("%d\t",array[m][n]);
                }
            } 
        
}

img

没啥问题啊

img

程序收到SIGSEGV提前终止了.p没有初始化,在某些情况下可能没有赋值就被用到了,而这个用到的时候是随机值,在某些时候可能不会溢出,有些时候就超出指针范围了。所以有时候正常,有时候异常。

q好像没用吧,p没有初始化
int p,q;改为int p = n;