Я пытаюсь ретроспективно вычислить функции о возможностях с помощью языка c и записать результат в текст. Результат выполнения моей программы с блоками кода 17.12:
"Linking stage skipped (build target has no object files to link" and
"Nothing to be done (all items are up-to-date)"
Кроме того, я пытаюсь запустить этот код с онлайн-компилятором (https://www.onlinegdb.com/online_c_compiler), и результат был:
«Ошибка сегментации» и «Программа завершена с кодом выхода 139»
Я считаю, что моя проблема заключается в распределении памяти с помощью трехмерных и двумерных многомерных массивов.
Пожалуйста, помогите мне !!
Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double z[7] = { 0, 19.08, 16.86, 11.72, 14.49, 10.87, 11.63 };
int N, k, i, j, l, fptr;
int A = 6, B = 544, C = 7;
double *** p = (double ***) malloc(A * sizeof(double**));
double *** X = (double ***) malloc(A * sizeof(double**));
double *** R = (double ***) malloc(A * sizeof(double**));
double ** sum = (double **) malloc(A * sizeof(double*));
double ** sum2 = (double **) malloc(A * sizeof(double*));
double ** m = (double **) malloc(C * sizeof(double*));
for (i = 0; i < A; i++)
{
p[i] = (double **) malloc(B * sizeof(double *));
X[i] = (double **) malloc(B * sizeof(double *));
R[i] = (double **) malloc(B * sizeof(double *));
for (j = 0; j < B; j++)
{
p[i][j] = (double *) malloc(B * sizeof(double));
X[i][j] = (double *) malloc(B * sizeof(double));
R[i][j] = (double *) malloc(B * sizeof(double));
sum[i] = (double *) malloc(B * sizeof(double));
sum2[i] = (double *) malloc(B * sizeof(double));
}
}
for (i = 0; i < C; i++)
{
m[i] = (double *) malloc(B * sizeof(double));
}
for (i = 1; i < 7; ++i)
{
for (N = 1; N < 545; ++N)
{
for (k = 0; k < N + 1; ++k)
{
m[C][B] = 0;
p[A][B][B] = 0;
X[A][B][B] = 0;
R[A][B][B] = 0;
sum2[A][B] = 0;
sum[A][B] = 0;
}
}
}
for (i = 1; i < 7; ++i)
{
p[i][0][0] = 1;
for (N = 1; N < 545; ++N)
{
for (k = 0; k < N + 1; ++k)
{
if (k == 0)
{
for (l = 1; l < N + 1; ++l)
{
p[i][l][N] = pow(0.5 * N / 544, l);
sum[i][N] += p[i][l][N];
}
p[i][k][N] = 1 - sum[i][N];
}
if (k != 0)
{
p[i][k - 1][N - 1] = pow(0.5 * (N) / 544, k - 1);
m[i][k] = k * z[i];
X[i][k][N] = p[i][k][N] * m[i][k] / p[i][k - 1][N - 1];
// m[i][k] = X[i][N] * p[i][k-1][N-1] / p[i][k][N];
printf("X = %.2lf", X[i][k][N]);
sum2[i][N] += k * p[i][k - 1][N - 1] / m[i][k];
}
if (k == N)
{
R[i][k][N] = m[i][k] * sum2[i][N];
printf("R = %.2lf", R[i][k][N]);
}
}
}
}
for (i = 1; i < 7; ++i)
{
for (N = 1; N < 545; ++N)
{
for (k = 0; k < N + 1; ++k)
{
FILE *fptr;
fptr = fopen("C:\\program.txt", "w");
if (fptr == NULL)
{
printf("Error!");
exit(1);
}
fprintf(fptr, "%.21f", X[i][k][N]);
fprintf(fptr, "%.21f", R[i][k][N]);
fclose(fptr);
}
}
}
return 0;
}