Адрес элемента в массиве становится слишком большим и вызывает переполнение - PullRequest
0 голосов
/ 29 апреля 2020

Адрес элемента в массиве становится слишком большим и вызывает переполнение

struct payment {
    char id[17];
    char date[10];
    int cost;
    struct payment* next = NULL;
};

int main() {
    payment* hash = (payment*) malloc(n * sizeof(payment));
    // ....
    function(hash);
}

void function(payment hash[]) {
    long long j;
    // ...
    if (hash[j].id[0] == '-')
        // ...
    }

(размер массива 2087123) У меня есть эта функция, но поскольку число j становится слишком большим (j = 1900000), поэтому возвращает ошибку переполнения.

Я пытался это решить:

if(((hash + j*sizeof(payment))->id)[0] == '-')

Но это не дает мне те же значения, что и предыдущий метод до сбоя. (которые правильные)

Может кто-нибудь помочь с этим? (Я много искал)

1 Ответ

0 голосов
/ 30 апреля 2020

Вы получаете доступ к элементу, который не существует. Убедитесь, что j больше размера массива, прежде чем получить доступ к элементу.

if (j < n) {
    if(hash[j].id[0] == '-')
        ...
    }
}
else {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...