以下代码构建得非常好,并在 Turbo C++ 上运行。我在 MSVC2010 上构建了相同的,它构建没有错误,但是当我运行它(运行没有调试)时,它显示
gentic.exe 中出现未处理的 win32 异常
同样在调试期间它显示:
generic.exe 中 0x00411672 处的未处理异常:0xC0000005:访问冲突写入位置 0xcccccccc。
这发生在我输入行和列之后......在*dat2=(double *)malloc(r*sizeof(double*));
(黄色箭头现在指向这些行)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
class genetic
{
public:
int i,j,m,n;
double **dat2,**dat;
double** createarray(int r,int c)
{ int i;
*dat2=(double *)malloc(r*sizeof(double*));
for(i=0;i<r;i++)
{
dat2[i]=(double*)malloc(c*sizeof(double));
}
return dat2;
}
void input()
{
printf("enter rows \n");
scanf("%d",&m);
printf("enter cols \n");
scanf("%d",&n);
dat=createarray(m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
double val;
scanf("%lf",&val);
dat[i][j]=val;
}
}
}
void output()
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%3lf ",dat[i][j]);
}
printf("\n");
}
}
};
void main()
{
genetic g1;
g1.input();
g1.output();
getch();
}
知道为什么在 MSVC 中有这种不同的行为,我们如何解决这个问题?
更新:
正如建议的那样,我改为:
double** createarray(int r,int c)
{ int i;
double **dat2;
dat2=(double *)malloc(r*sizeof(double*));
for(i=0;i<r;i++)
{
dat2[i]=(double*)malloc(c*sizeof(double));
}
return dat2;
}
但我仍然面临问题:
错误 1 错误 C2440: '=' : 无法从 'double ' 转换为 'double * '