Этот код успешно выполнен в Visual C++, но показал ошибку времени выполнения в блоках кода, возвращающих "Процесс, завершенный статусом -1073741819". Также, когда MAX определяется как "#define MAX 4", он успешно выполнен. Кто-нибудь может помочь? Thanx!
#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;
}
Вместо "* (ptr+ (i * MAX) +j) для доступа к x [i, j] используйте" * (* (x + i) +j) ".
Это решит ошибку сегментации. "* (ptr+ (i * MAX) +j)" такой же, как ptr [i * MAX +j], который является ограниченным доступом для некоторых значений я и j.
ваши переменные должны быть double *
, а не double **
(указатели на указатели).