malloc не может выделить память

Я просто не понимаю, почему malloc продолжает работать с ошибкой "Не удается выделить память" в этой функции: (она вызывает perror и возвращает -1)

РЕДАКТИРОВАТЬ: size_t является типом без знака, конечно, он не будет работать при передаче -1

int circularBuffer_get(circularBuffer_t *buf, size_t count, void ***retArray) { 
    size_t retVal = (count >= 0 ? count : buf->elCount);
    if (retVal == 0) return 0;

    /* ALloco l'array di ritorno */
    void **retArr = malloc(sizeof(void*) * retVal);
    if(!retArr) {perror("Allocating return value"); return -1; }
    memset(retArr, 0, sizeof(void*) * retVal);

    int i, j = 0; /* Percorro gli elementi da estrarre */
    for (i = (buf->bufCursor - retVal + buf->bufSize) % buf->bufSize; i < retVal; i = (i+1) % buf->bufSize ) {
        /* Estraggo l'elemento */
        retArr[j] = buf->buffer[i];

        /* Libero lo slot nel buffer */
        buf->buffer[i] = NULL;
        j++;
    }

    /* Aggiorno il numero di elementi nel buffer */
    buf->elCount -= retVal;

    *retArray = retArr;
    return retVal;
}

я вызываю эту функцию в основной функции как:

circularBuffer_get(buf, -1, (void***)&arr);

обратите внимание, что buf распределяется нормально (я проверил каждое значение и указатель, а текущее значение buf->elCount равно 1 (я также проверил это, используя printf).

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

2 ответа

size_t(-1) = 18446744073709551615

Возможно, вам просто не хватило памяти:)

Тип size_t, который я использовал, является беззнаковым, и передача -1 в качестве аргумента приведет к таким ошибкам

Другие вопросы по тегам