Не могу напечатать пользовательскую функцию в C - PullRequest
0 голосов
/ 06 ноября 2018

Каждый раз, когда я пытаюсь напечатать возвращенное значение пользовательской функции, мой код не может распечатать значение.

#include <stdio.h>
#include <stdlib.h>

int n;
int *d = NULL;
int **M = NULL;
int **P = NULL;

int minimult(int n, int *d, int **P)
{
    int i, j, k, diagonal;

    for (i = 1; i <= n; i++)
        M[i][i] = 0;

    for (diagonal = 1; diagonal <= n - 1; diagonal++)
        for (i = 1; i <= n - diagonal; i++)
        {
            j = i + diagonal;

            int *min = NULL;
            M[i][j] = min[0];

            for (k = i; k < j; k++)
            {
                min[k] = (M[i][k] + M[k + 1][j] + d[i - 1] * d[k] * d[j]);

                if (min[k] < min[k + 1])
                    M[i][j] = min[k];
                else
                    M[i][j] = min[k + 1];
            }
        }

    return **M;
    return **P;
}


void order(int i, int j)
{
    int k;

    if (i == j)
        printf("A%d\n", i);

    else
    {
        k = P[i][j];
        printf("(");
        order(i, k);
        order(k + 1, j);
        printf(")");
    }

}


int main()
{
    int i, j;
    int input;

    printf("Write the size of matrices.\n");
    scanf("%d", &n);
    M = malloc(sizeof(int*)*n);
    for (i = 0; i < n; i++)
    {
        M = malloc(sizeof(int)*n);
    }

    printf("Input array d with %d elements.\n", n + 1);
    d = malloc(sizeof(int)*n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &input);
        d[i] = input;
    }    

    free(M);
    free(d);


    int minimult(int n, int *d, int **P);

    printf("The minimum size of multiplication is,\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%d\n", M[i][j]);
        }
    }

    void order(i, j);

    system("pause");
    return 0;
}

Когда я запускаю код, я вижу только:

Напишите размер матрицы.

(Scanf)

Входной массив d с элементами (inputOfScanf).

(Scanf)

Минимальный размер умножения:

... и программа заканчивается.

Что я сделал не так?

Как я могу увидеть массив M и решение порядка функции?

1 Ответ

0 голосов
/ 06 ноября 2018

Я настоятельно рекомендую вам начать намного, намного проще. В программе, которую вы представили, многое происходит, но, как заметил в комментариях программист @Some, проблемы гораздо более фундаментальны, чем отсутствие вывода.

Например, начните с этого, который является небольшой частью вашей программы:

#include <stdlib.h>
#include <stdio.h>

int main(void) {
    int i;

    int n;
    int **M = NULL;

    printf("Write the size of matrices.\n");
    scanf("%d", &n);

    M = malloc(sizeof(int*)*n);
    for (i = 0; i < n; i++)
    {
        M = malloc(sizeof(int)*n);
    }

    for (i = 0; i < n; i++) {
        printf("matrix element #%d is %d\n", i, *M[i]);
    }
}

При запуске этот segfaults во втором цикле пытается получить доступ к *M[i]. Это потому, что, как указывает один из комментариев, в 1-м цикле вы действительно хотите:

M[i] = malloc(sizeof(int)*n);

С этим исправлением программа запускается и выводит, например, :

Write the size of matrices.
5
matrix element #0 is 0
matrix element #1 is 0
matrix element #2 is 0
matrix element #3 is 0
matrix element #4 is 0

Оттуда вы можете добавить немного за раз и убедиться, что то, что происходит, - то, чего вы ожидаете, распечатав все по пути. В конце концов, по мере продолжения вы сможете отбросить некоторые из более ранних операторов распечатки, чтобы вывод был сосредоточен только на той части, которую вы недавно добавили или изменили.

Вы можете медленно создать резервную копию функции, которую вы пытаетесь написать, но есть много основ, которые вам необходимо понять в первую очередь. Начните с простого, сделайте небольшие дополнения и выведите все. Это поможет вам понять ваш код и позволит понять, в чем дело.

...