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;
}
}
}
展开
 我来答
匿名用户
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 **matrix_t( double (*a_matrix)[2], int krow, int kline ) //修改为这样

多谢这位朋友~~但是,这样设置有些不大灵活,因为我不是每次矩阵的列维数都是2,请问这位朋友 是否有其他灵活些的方式?很困扰哇~
追答
你这里这样传入  编译器不知道数组维度是多少  
所以可以把b[k][k2]=a_matrix[k2][k]; 修改为 b[k][k2]=*(*a_matrix)++;

因为数组存放内存是连续的 这样写没问题,别的地方都按照你原来的即可
主公不在家
2012-02-21
知道答主
回答量:11
采纳率:0%
帮助的人:3.2万
展开全部
access violation,使用违法,定义错误了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式