关于

maxmad 2008-03-15 10:54:23
bool Maxtrix_Mul (SparseMatr M1, SparseMatr M2, int* M, int bufferSize, int& Row, int& Col)
{
if(M1.n!=M2.m)
{cerr<<"两矩阵不能相乘"<<endl;return 1;} //验证两矩阵能否相乘

if(M1.t*M2.t==0)
{cerr<<"矩阵相乘为0"<<endl;return 1;} //验证结果是否为0

int ahl=M1.m*M2.n;
if(ahl>bufferSize) //验证结果是否溢出
{cerr<<"缓冲区溢出"<<endl;return 1;}

M=new int[ahl]; //分配内存并使M指向它

for (int size=0;size<ahl;size++)
*(M+size)=0; //数组初始化为0

Row=M1.m;
Col=M2.n;
int pa=1,pb=1,pe;

Triple temp;
for (int o1=1;o1<M1.t;o1++) //将M1矩阵按行大小排序
if(M1.Seq_data[o1].i>M1.Seq_data[o1+1].i)
{temp=M1.Seq_data[o1];M1.Seq_data[o1]=M1.Seq_data[o1+1];M1.Seq_data[o1+1]=temp;}

for (int o=1;o<M2.t;o++) //将M2矩阵按列大小排序
if(M2.Seq_data[o].i>M2.Seq_data[o+1].i)
{temp=M2.Seq_data[o];M2.Seq_data[o]=M2.Seq_data[o+1];M2.Seq_data[o+1]=temp;}

for (int u=1;u<=Row;u++) //按行计算
for (int v=1;v<=Col;v++)
{
pe=0;
while(M1.Seq_data[pa].i<u)
{
pa++;
if(pa>M1.t)break;
}
while(M2.Seq_data[pb].j<v)
{
pb++;
if(pb>M2.t)break;
}
while(M1.Seq_data[pa].i==u&&M2.Seq_data[pb].j==v) //如果M1的列数等于M2的行数,计算其相乘结果
{
if(M1.Seq_data[pa].j==M2.Seq_data[pb].i)
{pe+=M1.Seq_data[pa].v*M2.Seq_data[pb].v;}
pa++;pb++;
}

*(M+(u-1)*Row+v)=pe;
}

return 0;

};


int* hp=NULL;
会产生一个错误:0x004120e4 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突
能不能请高手帮我解答一下为什么??
...全文
37 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxmad 2008-03-16
  • 打赏
  • 举报
回复
谢谢老大们!!
ouyh12345 2008-03-15
  • 打赏
  • 举报
回复
崩溃的时候调试一下,查看堆栈,就知道哪个指针出错了
paidfighting 2008-03-15
  • 打赏
  • 举报
回复
这种错一般是指针访问了非法地址
ryfdizuo 2008-03-15
  • 打赏
  • 举报
回复
应该是访问无效的指针吧,你仔细检查一下指针是否赋过值,
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-15 10:54
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下