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,使用违法,定义错误了吧
相似回答