c++调试中出现access violation的问题,代码如下。是否是申请动态数组出现了问题,求高手解答~
仅仅是一个矩阵相乘的函数的调用,编译时显示无问题,但是运行就崩。调试时,显示AccessViolation~~求高手解答~#include<iostream.h>doub...
仅仅是一个矩阵相乘的函数的调用,编译时显示无问题,但是运行就崩。调试时,显示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;
}
}
} 展开
#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;
}
}
} 展开
2个回答
2012-02-21
展开全部
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 **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)++;
因为数组存放内存是连续的 这样写没问题,别的地方都按照你原来的即可
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询