Несоответствие памяти в программе на C, использующей Malloc - PullRequest
0 голосов
/ 06 января 2019

Я работаю с c и динамической памятью, но у меня возникают проблемы с отображением некоторых значений в массиве int **

Я использовал Valgrind, вижу, где проблема, и я знаю, где она, но я не знаю, как ее исправить, потому что проблема не имеет смысла для меня.

result_s ** greedy(case_s ** cases, int cases_quantity)
{
    int ** case_conteiners;
    int * current_conteirners;
    result_s ** results = malloc(sizeof(result_s*)*cases_quantity);

    for (int i = 0; i < cases_quantity; ++i)
    {
        results[i] = malloc(sizeof(result_s));
        int conteiners_quantity = cases[i]->conteiners_quantity;
        int fuel = cases[i]->fuel;

        int current_fuel = 0;
        int max_conteiner = 0;
        int current_count = 0;
        int case_count = 0;
        current_conteirners = malloc(sizeof(int)*2);
        case_conteiners = malloc(sizeof(int*)*256);

        for (int j = 0; j <= conteiners_quantity+1; ++j)
        {
            if (current_fuel < fuel)
            {
                max_conteiner = max_value(cases[i]->conteiners, cases[i]->conteiners_quantity);
                printCurrent(i,max_conteiner);
                current_conteirners[current_count] = max_conteiner;
                current_fuel += max_conteiner;
                current_count++;
            }

            else if (current_fuel >= fuel && current_count <= 2 )
            {

                case_conteiners[case_count] = current_conteirners;

                printf("\n\n HERE IS THE LEAK %d\n\n", case_conteiners[0][1]);
                printf("\n\n HERE IS OK %d\n\n", current_conteirners[1]);

                current_conteirners = malloc(sizeof(int)*20);
                if (j != conteiners_quantity && i-1 != cases_quantity)
                {
                    current_fuel = 0;
                    current_count = 0;
                }
                case_count++;
            }
        }

        if (current_fuel >= fuel && current_count <= 2 )
        {
            case_conteiners[case_count] = current_conteirners;
            case_count++;
        }

        results[i]->conteiners = case_conteiners;
        results[i]->conteiners_quantity = 2;
        results[i]->case_count = case_count;
    }
    return results;
}

Как видите, я хочу создать массив массивов. Я хочу поместить много "current_conteiners" в "case_conteiners".

Почти все работает нормально, но case_conteiners [0] [1] дает мне только номер памяти, а case_conteiners [1] дает мне правильное значение.

РЕДАКТИРОВАТЬ: Здесь я называю функцию жадным. Случаи это массив дел. Структура с 2 int и массивом int.

    results = greedy(cases, atoi(data[1]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...