| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5854 人关注过本帖
标题:请教:c程序运行错误-Unhandled exception in (...).exe: 0xc0000005: Acc ...
只看楼主 加入收藏
dw_4
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-5-26
收藏
 问题点数:0 回复次数:9 
请教:c程序运行错误-Unhandled exception in (...).exe: 0xc0000005: Access Vio

我写一个化三角矩阵的c程序运行时出现:
Unhandled exception in (...).exe: 0xc0000005: Access Violation
这个是怎么回事啊?

#include<stdio.h>
/***//************
* swap: exchang the to paraments
******************************/
void swap(double & p1, double & p2)
{
double temp;
temp=p1;
p1=p2;
p2=temp;
}

/***//***********************
* 消元
**********************************/
void XiaoYuan(double a[][5], int size,double * detA, int start)
{
int i,j;
double L[10];
for(i=start+1;i<size;i++)
{
a[i][start]=a[i][start+1]/a[start][start];
for(j=start+1;j<=size;j++)
{
a[i][j]=a[i][j]-L[i]*a[start][j];

}
*detA=a[start][start]*(*detA);
}
}
/**//**********************************************************
* transform the given matrix a[][] to a up_triangel matrix *
* a[][] 系数矩阵,带等式右边b *
* size: 系数矩阵的行数 *
* detA: 系数矩阵的行列式 *
* e 为最小可分辨的值
* 完成返回1,矩阵非奇异返回0 *
******************************************************************/

int Tran_Up_Triangel(double a[][5],int size, double * detA, double e)
{
int k=0;
int i=0;
int l=0;
int j=0;
for(k=0;k<size-1;k++)
{
for(i=k+1,l=k;i<size;i++)
{
if(a[l][k]>a[i][k])
l=i;
}
if(a[l][k]<e&&a[l][k]>(-1)*e)
{
detA=0;
return 0;
}
else
{
for(j=k;j<=size;j++)
{
swap(a[k][j],a[l][j]);
* detA=(-1)*(*detA);
XiaoYuan(a,size,detA,k);
}
if(a[size-1][size-1]<e&&a[size-1][size-1]>(-1)*e)
{
detA=0;
return 0;
}
else
{
*detA=a[size-1][size-1]*(*detA);
}
}
}
return 1;
}

/**************************/
void print_array(double array[][5],int size)
{
int i,j;
for(i=0;i<size-1;i++)
{
for(j=0;j<size;j++)
{
printf(" %f", array[i][j]);
}
printf("\n");
}
}


#include<stdio.h>
#include"Subfun.h"
#include <stdlib.h>
/**//********************************
* test_main *
* for testing *
************************************/
void main()
{
double a[4][5];
int n=4;
double e=0.02;
double detA=0;
int i,j;

for (i=0;i<=n;i++)
for (j=0;j<=n+1;j++)
a[i][j]=(float)rand()/100.0;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++) printf("%8.4f ",a[i][j]);
printf("\n");
}
if(Tran_Up_Triangel(a, n,& detA,e)==1)
{
print_array(a,n);
}

搜索更多相关主题的帖子: exception Unhandled Vio Access exe 
2006-05-26 14:16
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*
[注意]因涉及“引用”要用C++编译器按C++处理。
以下凡打//////者表示发生过非实质性的改动。
迄今为止尚未调通。
*/
#include<stdio.h>
#include<math.h>
/********************************
swap: exchang the to paraments
********************************/
void swap(double &p1, double &p2)
{
double temp;
temp=p1;
p1=p2;
p2=temp;
}

/*********************************
消元
**********************************/
void XiaoYuan(double a[][5], int size, double *detA, int start)
{
int i,j;
double L[10];
for(i=start+1;i<size;i++)
{
a[i][start]=a[i][start+1]/a[start][start];
for(j=start+1;j<=size;j++)
{
a[i][j]=a[i][j]-L[i]*a[start][j];
}
*detA=a[start][start]*(*detA);
}
}
/************************************************************
transform the given matrix a[][] to a up_triangel matrix
a[][] 增广矩阵
size: 矩阵的行数
detA: 系数矩阵行列式的值
e: 依稀可辨的小正数
正常返回1,奇异矩阵返回0
*************************************************************/
int Tran_Up_Triangel(double a[][5],int size, double * detA, double e)
{
int k=0;
int i=0;
int l=0;
int j=0;
for(k=0;k<size-1;k++)
{
for(i=k+1,l=k;i<size;i++)
{
if(a[l][k]>a[i][k])
l=i;
}
if(fabs(a[l][k])<e)//////
{
detA=0;
return 0;
}
else
{
for(j=k;j<=size;j++)
{
swap(a[k][j],a[l][j]);
*detA *= -1; //////
XiaoYuan(a,size,detA,k);
}
if(fabs(a[size-1][size-1])<e)//////
{
detA=0;
return 0;
}
else
{
*detA *= a[size-1][size-1];//////
}
}
}
return 1;
}

void print_array(double array[][5],int size)
{
int i,j;
for(i=0;i<size-1;i++)
{
for(j=0;j<size;j++)
{
printf(" %f", array[i][j]);
}
printf("\n");
}
}

#include<stdio.h>
//#include"Subfun.h" 这是什么?
#include<stdlib.h>
void main()
{
double a[4][5];
int n=4;
double e=0.02;//////恐怕太大了
double detA=0;
int i,j;

for(i=0;i<=n;i++)
for(j=0;j<=n+1;j++)
a[i][j]=rand()/100.0;//////
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)printf("%8.4f ",a[i][j]);
printf("\n");
}
if(Tran_Up_Triangel(a,n,&detA,e)==1)
{
print_array(a,n);
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-26 14:50
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
/*至少这里发生“越界”*/
for(i=0;i<=n;i++)//应改成for(i=0;i<n;i++)
for(j=0;j<=n+1;j++)//应改成for(j=0;j<=n;j++)
a[i][j]=rand()/100.0;
for(i=1;i<=n;i++)//应改成for(i=0;i<n;i++)
{//下行开头应为for(j=0;j<=n;j++)
for(j=1;j<=n;j++)printf("%8.4f ",a[i][j]);
printf("\n");
/*改正上述错误后,至少运行时不报意外事故*/

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-26 15:11
dw_4
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-5-26
收藏
得分:0 
谢谢!!

但是,我把主函数里的那几个for语句照上面的改了,但是还是有一样的越界提示啊

Subfun.h是放消元和化三角两个函数的文件,这样做头文件可以的吧?我没怎么编程经验,弄的很不规范,不好意思!

2006-05-26 15:29
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*
请LZ把下列代码COPY到 mat.cpp 文件
看看到底能否免除运行时的意外终止。
*/
#include<stdio.h>
#include<math.h>
/********************************
swap: exchang the to paraments
********************************/
void swap(double &p1, double &p2)
{
double temp;
temp=p1;
p1=p2;
p2=temp;
}

/*********************************

**********************************/
void XiaoYuan(double a[][5], int size, double *detA, int start)
{
int i,j;
double L[10];
for(i=start+1;i<size;i++)
{
a[i][start]=a[i][start+1]/a[start][start];
for(j=start+1;j<=size;j++)
{
a[i][j]=a[i][j]-L[i]*a[start][j];
}
*detA=a[start][start]*(*detA);
}
}
/************************************************************
transform the given matrix a[][] to a up_triangel matrix
*************************************************************/
int Tran_Up_Triangel(double a[][5],int size,double *detA,double e)
{
int k=0;
int i=0;
int l=0;
int j=0;
for(k=0;k<size-1;k++)
{
for(i=k+1,l=k;i<size;i++)
{
if(a[l][k]>a[i][k])
l=i;
}
if(fabs(a[l][k])<e)//////
{
detA=0;
return 0;
}
else
{
for(j=k;j<=size;j++)
{
swap(a[k][j],a[l][j]);
*detA *= -1; //////
XiaoYuan(a,size,detA,k);
}
if(fabs(a[size-1][size-1])<e)//////
{
detA=0;
return 0;
}
else
{
*detA *= a[size-1][size-1];//////
}
}
}
return 1;
}

void print_array(double array[][5],int size)
{
int i,j;
for(i=0;i<size-1;i++)
{
for(j=0;j<size;j++)
{
printf(" %f", array[i][j]);
}
printf("\n");
}
}

#include<stdio.h>
#include<stdlib.h>
void main()
{
double a[4][5];
int n=4;
double e=0.02;
double detA=0;//好像是累乘哟detA=1
int i,j;

for(i=0;i< n;i++)
for(j=0;j<=n;j++)
a[i][j]=rand()/100.0;//////
for(i=0;i< n;i++)
{
for(j=0;j<=n;j++)printf("%8.4f ",a[i][j]);
printf("\n");
}
if(Tran_Up_Triangel(a,n,&detA,e)==1)
{
print_array(a,n);
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-26 15:37
dw_4
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-5-26
收藏
得分:0 

这样就不报错了!!
非常感谢!
报那个错 是不是 一般因为访问越界?


2006-05-26 15:58
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用dw_4在2006-5-26 15:58:00的发言:

这样就不报错了!!
非常感谢!
报那个错 是不是 一般因为访问越界?

报那个错的条件是:越界+写操作
换句话说,“读”越界数据不报错。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-26 18:18
dw_4
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-5-26
收藏
得分:0 

谢谢!!!


2006-05-26 20:20
dw_4
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-5-26
收藏
得分:0 

有一个问题哦,我现在写了这两个小函数想要测试是否正确,我在主函数里写了简单的测试代码,我现在修改到已经可以有比较正常的输出了,但是不知道输出的三角矩阵对不对,我想问一下有没有什么好办法可以方便地验证的啊?还有有没有可以专门测这些子函数的东西呢?


2006-05-26 20:24
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用dw_4在2006-5-26 20:24:00的发言:

有一个问题哦,我现在写了这两个小函数想要测试是否正确,我在主函数里写了简单的测试代码,我现在修改到已经可以有比较正常的输出了,但是不知道输出的三角矩阵对不对,我想问一下有没有什么好办法可以方便地验证的啊?还有有没有可以专门测这些子函数的东西呢?

1。不能用你那个随机数方法,因为你无法预知正确与否。
2。建议:从线性代数教材上找一道现成的例题进行验证。
3。估计:你目前那个代码可能还有不少大大小小的问题。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-27 04:25
快速回复:请教:c程序运行错误-Unhandled exception in (...).exe: 0xc0000005 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014747 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved