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 в качестве аргумента приведет к таким ошибкам