在用指標定義三維陣列的時候,對三位陣列中的一個數字求平方,一直提示這個(斷錯誤,核心已轉儲):
Program received signal SIGSEGV, Segmentation fault.
0x0000555555554f0a in main () at SPH.cpp:103
103 l1=pow((h*h-pow(r[i][j][k],2)),3);
(這個是除錯中報的錯)
萌新不知道怎么改,懇請各位大佬幫幫忙!

源代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define mm 1.000
#define h 5.000
#define PI 3.1415926535
float **matrix2f(int m,int n)
{
float **pp;
int i;
pp=(float **)malloc(m*sizeof(float *));
for(i=0;i<m;i++)
{
pp[i]=(float *)malloc(n*sizeof(float));
}
return pp;
}
float ***matrix3f(int x,int y,int z)
{
float ***ppp;
int i,j;
ppp=(float ***)malloc(x*sizeof(float **));
for(i=0;i<x;i++)
{
ppp[i]=(float **)malloc(y*sizeof(float *));
}
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
ppp[i][j]=(float *)malloc(z*sizeof(float));
}
}
return ppp;
}
int main(void)
{
float **rou;
FILE *frou;
int i,j,xx,yy;
int m,n,k=0;
float **x;
float **y;
float ***r;
float l1,l2,l3;
printf("請輸入m:");
scanf("%d",&m);
printf("請輸入n:");
scanf("%d",&n);
rou=matrix2f(m,n);
x=matrix2f(m,n);
y=matrix2f(m,n);
r=matrix3f(m,n,m*n);
frou=fopen("rou.txt","w+");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
//x[i][j]=rand()*m/(RAND_MAX+1);
//y[i][j]=rand()*n/(RAND_MAX+1);
x[i][j]=i+j;
y[i][j]=i+j;
printf("%f %f",x[i][j],y[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
xx=k/m;yy=k%m;
r[i][j][k]=pow((x[xx][yy]-x[i][j]),2)+pow((y[xx][yy]-y[i][j]),2);
k=k+1;
printf("%f",r[i][j][k]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
r[i][j]=0;
}
}
for(k=0;k<n*m;k++)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
xx=k/m;yy=k%m;
l2=mm*315.0/(64.0*PI*pow(h,9));
l1=pow((h*h-pow(r[i][j][k],2)),3);
rou[xx][yy]=rou[xx][yy]+l1*l2;
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
fprintf(frou,"%f ",rou[i][j]);
}
fprintf(frou,"\n");
}
fclose(frou);
free(rou);
free(x);free(y);free(r);
return 0;
}
uj5u.com熱心網友回復:
已解決,原因是第91行少了一維陣列....uj5u.com熱心網友回復:
呵呵,三維陣列,r[i][j]是第三維的首地址,而且陣列的地址是事先分配度的,相當于指標常量,所以r[i][j]=0就非法了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/135670.html
標籤:C++ 語言
上一篇:C++報錯:引發了例外: 寫入訪問權限沖突。 this 是 nullptr。
下一篇:電能凈值
