Значение Int внутри ячейки массива каким-то образом сохраняется в виде отдельного адреса 2d-массива

#c #multidimensional-array #struct #malloc #field

Вопрос:

Я создал эту структуру и функцию, которая инициализирует все поля в этой структуре и возвращает указатель на структуру. В этой структуре у меня есть один одномерный массив целых чисел и двумерный массив указателей. Однако при инициализации и увеличении значения внутри ячеек внутри party->fragment_sizes[I] (одномерный массив), party->>fragment_sizes[] также начинает увеличиваться (двумерный массив). Участник->размер фрагмента[i] изменяется с НУЛЯ (0x0) до (0x10000), (0x2000000) Я понятия не имею, как, но это меня очень сильно расстраивает. Мне нужно, чтобы party_fragments_sizes оставался НУЛЕВЫМ до тех пор, пока не будет выделен (внутри другой функции).

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

typedef struct LonelyPartyArray
{
    int **fragments;      // the address of fragments[i] is being set as
    int *fragment_sizes;  // the value inside fragment_sizes[i]
} LonelyPartyArray;

LonelyPartyArray *createParty(int num_fragments)
{
    int i;

    // Allocating LonelyPartyArray struct pointer
    LonelyPartyArray *party = malloc(sizeof(LonelyPartyArray));

    // I am allocating these separately, 
    // is something going on with how my system is
    // allocating space for these arrays?

    // Allocating LonelyPartyArray
    party->fragments = malloc(sizeof(int *) * num_fragments);

    // Allocating LonelyPartyArray fragment size
    party->fragment_sizes = malloc(sizeof(int) * num_fragments);

    // Initializing party->fragments to NULL (not used) and fragment_sizes to zero
    for (i = 0; i < num_fragments; i  )
        party->fragments[i] = NULL;

    for (i = 0; i < num_fragments; i  )
        party->fragment_sizes[i] = 0;

    // Party->fragments[I] is not remaining NULL, but is being
    // incremented. (I.e., party-fragments[I] increments 0x0, 
    // 0x10000, 0x20000, 0x30000 etc). This needs to remain NULL.
    for (i = 0; i < num_fragments; i  )
    {
        if (party->fragments[i] != party->fragment_sizes[i])
            break;
        printf("Why is this happening???? [%d]n", i);
        printf("%pn, party->fragments[i]);
    }
    return NULL;
}

int main(void)
{
    LonelyPartyArray *party = createParty(3);

    return 0;
}
 

Я понятия не имею, как party->fragments[] устанавливается в качестве адреса для party->>fragment_sizes [], но мне нужно, чтобы они были отдельными.

Комментарии:

1. Что заставляет вас думать party->fragments[i] , что это устанавливается в качестве адреса party->fragment_sizes[i] ? Вы получаете не адрес party->fragment_sizes[i] , а его стоимость.

2. Воспользуйся if (party->fragments[i] != amp;party->fragment_sizes[i])

3. При увеличении party->fragments[] увеличивается адрес party->>fragment_sizes []. Адрес party->fragment_sizes[] изменяется от NULL (0x0) до 0x100000, 0x200000, 0x300000 и т.д. Party->fragment_sizes[] должен оставаться нулевым @Barmar

4. fragment_sizes содержит целые числа, а не указатели, почему вы сравниваете их с указателями?

5. Потому что указатель (сторона->фрагменты[I]) изменяется с НУЛЯ на значение целого числа. Я хотел сказать, что party->фрагменты[I] адресуют приращения в моем последнем комментарии. Извините