在代码块中需要帮助

时间:2014-04-05 16:02:10

标签: c++ codeblocks


此代码在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;
}

2 个答案:

答案 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 **(指针指针)。