Я обнаружил, что проблема заключается в сегментации, и программа получает сигнал SIGSEGV. Программа намного сложнее, чем это, но это единственные моменты, на которые влияют эти массивы.Как присвоить значения двумерному динамическому массиву?
При попытке распечатать или присвоить значения Inputarray и Outputarray программа выйдет из строя, не показывая никаких ошибок.
Я создал программу, которая делает только это, и она работает отлично, поэтому, поскольку я понятия не имел, что вызывает эту проблему, я решил поставить весь код до этой точки.
ПРОГРАММА СБОРОВ НА ПЛОЩАДКЕ, В КОТОРЫХ Я ВКЛЮЧАЛ ИСКЛЮЧИТЕЛЬНЫЕ МАРКИ.
До этого момента он отлично работает. Когда я искал похожие случаи, все, что я нашел, это люди, которые используют разные функции для распределения своих массивов, которые я не понимаю, как это связано с моей проблемой. Самое странное, что я создал другую программу только с этим и, похоже, работает Спасибо за помощь !!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
FILE*Results_ptr;
int* WaveguideConfig;
double* itta;
double** InputArray;
double** GateArray;
double** OutputArray;
double** ProbabilityArray;
double Final[21];
double Error, ErrorIncrement;
double j,G,LO;
int* PhotonArray;
int i,m,z,o,k,a,c,v,I,M,A,B,C,D,E,F,H,J,K,N,NP,W,V,Z,L,GP,U,WG,ii,jj;
printf("Enter an integer for the number of entry points:");
scanf("%d",&N);
printf("Enter an integer for the number of waveguides:");
scanf("%d",&WG);
printf("Enter number of photons:");
scanf("%d",&NP);
WaveguideConfig=(int*)malloc(N * sizeof(int*));
itta=(double*)malloc(N * sizeof(double*));
InputArray=(double**)malloc(NP * sizeof(double*));
OutputArray=(double**)malloc(NP * sizeof(double*));
for(W=0;W<NP;W++)
{
InputArray[W]=(double*)malloc(N * sizeof(double));
OutputArray[W]=(double*)malloc(N * sizeof(double));
}
GateArray=(double**)malloc(N * sizeof(double*));
ProbabilityArray=(double**)malloc(N * sizeof(double*));
for(Z=0;Z<N;Z++)
{
GateArray[Z]=(double*)malloc(N * sizeof(double));
ProbabilityArray[Z]=(double*)malloc(N * sizeof(double));
}
Results_ptr=fopen("Results.txt","w");
printf("Enter configuration of the waveguides:");
scanf("%d %d %d %d %d %d %d", &WaveguideConfig[0], &WaveguideConfig[1], &WaveguideConfig[2], &WaveguideConfig[3], &WaveguideConfig[4], &WaveguideConfig[5], &WaveguideConfig[6]);
printf("Enter the corresponding values of reflectivity:");
scanf("%lf %lf %lf %lf %lf %lf %lf",&itta[0],&itta[1],&itta[2],&itta[3],&itta[4],&itta[5],&itta[6]);
PhotonArray=malloc(NP * sizeof(int));
printf("Enter photon entry points:");
scanf("%d %d", &PhotonArray[0], &PhotonArray[1]);
printf("Enter error in reflectivity:");
scanf("%lf",&Error);
ErrorIncrement=Error/10;
for(H=0;H<10;H++)
{
for(GP=0;GP<NP;GP++)
{
InputArray[GP][PhotonArray[GP]]=1;
}
C=0;
E=0;
C=0;
G=0;
for(k=0;k<WG;k++)
{
for(m=0;m<N;m++)
{
for(z=0;z<N;z++)
{
if(z==m)
{
GateArray[m][z]=1;
}
else
{
GateArray[m][z]=0;
}
}
}
GateArray[WaveguideConfig[k]][WaveguideConfig[k]]=sqrt(itta[k]+H*ErrorIncrement);
GateArray[WaveguideConfig[k]][WaveguideConfig[k]+1]=sqrt(1-itta[k]+H*ErrorIncrement);
GateArray[WaveguideConfig[k]+1][WaveguideConfig[k]]=sqrt(1-itta[k]+H*ErrorIncrement);
GateArray[WaveguideConfig[k]+1][WaveguideConfig[k]+1]=-sqrt(itta[k]+H*ErrorIncrement);
for(I=0;I<N;I++)
{
for(M=0;M<N;M++)
{
if(M==(N-1))
{
if(I==(N-1))
{
printf("%lf\n\n", GateArray[I][M]);
}
else
{
printf("%lf\n", GateArray[I][M]);
}
}
else
{
printf("%lf\t", GateArray[I][M]);
}
}
}
for(L=0;L<NP;L++)//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
for(i=0;i<N;i++)
{
for(o=0;o<N;o++)
{
OutputArray[L][i]+=GateArray[i][o]*InputArray[L][o];
printf("%lf", OutputArray[L][i]);
}
}
}//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
}
}
}
Первый шаг программирования - узнать, как отступать от кода. – haccks
Первый шаг с динамическим распределением памяти - это не выдавать результат 'malloc' & friends в C. Это не C++! И: это не 2-мерные массивы, а 1D массивы указателей (до 1D массивов). – Olaf
Запустите этот код через отладчик - один шаг, а затем вы увидите, где он «сбой». Также - разделить код на функции - так что это не так «волосатое», чтобы посмотреть. – Neil