c++调试中出现access violation的问题,代码如下。是否是申请动态数组出现了问题,求高手解答~

仅仅是一个矩阵相乘的函数的调用,编译时显示无问题,但是运行就崩。调试时,显示Access Violation~~ 求高手解答~

#include <iostream.h>

double **matrix_t( double **a_matrix, int krow, int kline )
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//double *a_matrix[], *b_matrix[];
//int krow, kline;
{
double **b = new double *[krow]; //VC显示错误行~~~~~~~
//*b= new double[krow];
for (int i=0; i<krow; i++)
{
b[i] = new double[kline];
}
int k, k2;
// printf("matrix_tt!!!!!");
for( k=0; k<krow; k++ )
for( k2=0; k2<kline; k2++ )
b[k][k2]=a_matrix[k2][k];
return b;
}

void main()
{
double a[2][2] ={1,2,3,4};
double *s1 =&a[0][0];
double **s = &s1;
double **c = matrix_t((double **)s,2,2);
for (int i =0; i<2;i++)
{
for (int j=0;j<2;j++)
{
cout<<c[i][j]<<endl;
}
}
}

double **matrix_t( double (*a_matrix)[2], int krow, int kline ) //修改为这样

double **c = matrix_t(a,2,2);//调用时候修改为这样

原因是二维数组参数传递问题导致
matrix_t((double **)s,2,2); 这个s是指向第一行的指针的指针
double **matrix_t( double **a_matrix, int krow, int kline ) 这样调用 a_matrix 的大小其实就第一行的大小
------------------------------------------------------------
或者b[k][k2]=a_matrix[k2][k]; 修改为 b[k][k2]=*(*a_matrix)++;追问

double **matrix_t( double (*a_matrix)[2], int krow, int kline ) //修改为这样

多谢这位朋友~~但是,这样设置有些不大灵活,因为我不是每次矩阵的列维数都是2,请问这位朋友 是否有其他灵活些的方式?很困扰哇~

追答

你这里这样传入 编译器不知道数组维度是多少
所以可以把b[k][k2]=a_matrix[k2][k]; 修改为 b[k][k2]=*(*a_matrix)++;

因为数组存放内存是连续的 这样写没问题,别的地方都按照你原来的即可

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-21
access violation,使用违法,定义错误了吧

c++调试中出现access violation的问题,代码如下。是否是申请动态数组...
double **matrix_t( double (*a_matrix)[2], int krow, int kline ) \/\/修改为这样 double **c = matrix_t(a,2,2);\/\/调用时候修改为这样 原因是二维数组参数传递问题导致 matrix_t((double **)s,2,2); 这个s是指向第一行的指针的指针 double **matrix_t( double **a_matrix, i...

C++编程 报access violation错误
出现access violation at address 00000000. read of address 00000000.原因是:没有运行服务端软件,所以客户机会提示"Access violation at address 00000000, read of address 0000000",开启服务端程序或检查网线即可解决。另外,可能出现这个问题的原因是因为你是在WINRAR的窗口中运行程序,而程序又找不到...

C++编程 报access violation错误
这个是内存访问错误,大部分情况是使用指针不正确引起的,调试下,单步执行,执行到哪行报错了就是哪行的指针有问题,重点检查下就好了

C++编程 报access violation错误
出现这种错误提示,一般是因为程序试图访问“无权”访问的内存区域。检查一下程序中是否有对数组的越界访问、是否有对没有初始化过的指针所指内存的访问、是否有对已经释放了的内存的访问、……。

用C++ Builder 开发的程序启动报Access violation
1、打开编译器警告,处理警告:使用未初始化的指针。2、共用的类,检查构造函数,保障每个变量都已经初始化。3、数组或内存越界检查。用codeguard 或 eureKaLog等检查,如果内存越界,则会有提示。4、所有强制指针转换的地方,需要仔细确认。5、同一内存块内的变量越界,无法检出,需要调试。

c++ 程序运行时出现问题,调试时显示access violation,急求高手啊
unit *new_unit;unit的定义在哪儿?

c++ 0xC0000005:Access Violation错误 求真相 求解释
include <iostream> using namespace std;void main(){ char a[] = "dfdfd,dfd";\/\/\/直接用c指向常量字符串之后,你尝试修改常量字符串的内容,就会挂,放数组里即可 char *c = a;\/\/\/因为不允许修改常量 char *s = c;for(; *c; c++){ s = 'a';s++;} cout<<a<<endl;\/\/\/输出c...

如何解决C++ Builder 中的Access Violation错误?
经常可能造成这种问题的错误比如说数组下标越界、指针非法访问等,建议设置断点调试,查找错误产生的代码位置。

c语言,出现了Access Violation怎么办啊。。。
"%f,%f,%f",&a[2][3]);printf("\\n input c:");scanf("%f,%f,%f",&a[3][3]);这三个scanf写的很有问题 你要一次输入三个应该这么写 scanf("%d%d%d",&a[0][0],&a[0][1],&a[0][2])或者你使用for循环输入三次,还有就是scanf函数里边不要写 ‘ ,’之类的其它字符 ...

...in rec_test.exe:0xc0000005:Access Violation
出现这种错误的原因有很多,最常见的是引用数组,数组访问越界,Access Violation的意思,暴力访问。也就是访问地址出错。还有就是指针变量没有初始化分配空间,而进行访问赋值,还有其他的很多原因,如果,给你的建议能自己解决了最好,还不能解决,建议最好能贴出代码来分析。

相似回答