矩阵转置!转置代码有问题!求解

/ ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
using namespace std;

typedef struct

{

int i,j;

int e;

}Triple;

typedef struct

{

Triple data[100];

int mu,nu,tu;

}SparseMatrix;

void CreateMatrix(SparseMatrix &M)

{

cout<<"请输入矩阵行数:";

cin>>M.mu;

cout<<"请输入矩阵列数:";

cin>>M.nu;

cout<<"请输入非零元素个数:";

cin>>M.tu;

cout<<"请输入非零元素(输入格式为:行号 列号 元素值):\n";

for(int p=1;p<=M.tu;p++)

    cin>>M.data[p].i>>M.data[p].j>>M.data[p].e;

}

void ShowMatrix(SparseMatrix&M)
{
int p=1;
if (M.nu)
{

    for(int i=1;i<=M.mu;i++)
        {
            for(int j=1;j<=M.nu;j++)
            {
                if(i==M.data[p].i&&j==M.data[p].j)
                {
                    cout<<M.data[p].e<<" ";
                    p++;
                }
                else
                    cout<<0<<" ";
            }
            cout<<endl;
    }
}

}

void TransMatrix(SparseMatrix&M,SparseMatrix&N)
{
N.mu=M.nu;
N.nu=M.mu;
N.tu=M.tu;

if(N.tu)
{
    int n=1;
    for(int i=1;i<=M.mu;i++)

img

        for(int m=1;m<=M.tu;m++)
        {
            if(M.data[m].i==i)
            {
                N.data[n].i=M.data[m].j;
                N.data[n].j=M.data[m].i;
                N.data[n].e=M.data[m].e;
                n++;
            }
        }
}

}

int _tmain(int argc, _TCHAR* argv[])
{
SparseMatrix M,N;
CreateMatrix(M);
cout<<endl<<"显示创建的行列式:"<<endl;
ShowMatrix(M);
TransMatrix(M,N);
cout<<endl<<"转置后的行列式为:"<<endl;
ShowMatrix(N);

getchar();
return 0;

}

他这个转置代码哪里有漏洞啊?测数据转置一直有问题