此代码在Visual C ++中成功执行,但在代码中显示运行时错误 块返回“进程以状态-1073741819终止”。当MAX是时 定义为“#define MAX 4”,它成功执行。有人可以帮忙吗? 感谢名单!
#include <iostream>
#include <cstdlib>
#define MAX 32
using namespace std;
double **A, **B, **C;
void initialize(double** x) //code to initialize matrix
{
static int n = 0;
for(int i = 0; i < MAX; i++)
*(x+i) = (double*) new double[MAX];
srand(n);
double* ptr = *x;
for(int i = 0; i < MAX; i++)
for(int j = 0; j < MAX; j++)
*(ptr+(i*MAX)+j) = rand() % 100;
n++;
}
void print(double** x)
{
double* ptr = *x;
for(int i = 0; i < MAX; i++){
for(int j = 0; j < MAX; j++)
cout<<*(ptr+(i*MAX)+j)<<" ";
cout<<endl;
}
}
int main(){
A = (double**) new double[MAX];
B = (double**) new double[MAX];
C = (double**) new double[MAX];
initialize(A);
initialize(B);
initialize(C);
print(A);
cout<<endl;
print(B);
cout<<endl;
print(C);
cout<<endl;
system("pause");
return 0;
}
答案 0 :(得分:1)
取代&#34; *(ptr +(i * MAX)+ j)&#34;访问x [i,j]使用&#34; *(*(x + i)+ j)&#34;
这将解决分段错误。 &#34; *(PTR +(I * MAX)+ j)的&#34;与ptr [i * MAX + j]相同,这是对i和j的某些值的越界访问。
答案 1 :(得分:0)
你的变量应该是double *
,而不是double **
(指针指针)。