malloc无法分配内存

时间:2017-07-01 12:02:02

标签: c memory malloc allocation

我只是不明白为什么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-&gt; elCount的当前值是1(我也检查过使用printf)。

我认为这也不是我正在使用的虚拟机的问题,因为其他程序只运行很好的分配......

2 个答案:

答案 0 :(得分:1)

size_t(-1) = 18446744073709551615

你可能刚用完了内存:)

答案 1 :(得分:0)

我使用的类型size_t是无符号的,并且传递-1作为参数将导致此类错误