Нужна помощь в кодовых блоках

0

Этот код успешно выполнен в 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;
}
Теги:
codeblocks

2 ответа

1
Лучший ответ

Вместо "* (ptr+ (i * MAX) +j) для доступа к x [i, j] используйте" * (* (x + i) +j) ".

Это решит ошибку сегментации. "* (ptr+ (i * MAX) +j)" такой же, как ptr [i * MAX +j], который является ограниченным доступом для некоторых значений я и j.

  • 0
    Да, это сработало! Я думаю, что проблема была в ошибке сегментации, как вы и предлагали. Но почему же раньше это работало в Visual C ++? Это из-за различий в компиляторе или ОС предоставила специальные средства управления доступом к Visual C ++? Есть идеи
0

ваши переменные должны быть double *, а не double ** (указатели на указатели).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню