malloc无法分配内存
我只是不明白为什么malloc在这个函数中总是出现“无法分配内存”的错误:(它触发perror并返回-1) 编辑:size\u t是一个无符号类型,当传递-1时它当然不起作用malloc无法分配内存,c,memory,malloc,allocation,C,Memory,Malloc,Allocation,我只是不明白为什么malloc在这个函数中总是出现“无法分配内存”的错误:(它触发perror并返回-1) 编辑:size\u t是一个无符号类型,当传递-1时它当然不起作用 int circularBuffer_get(circularBuffer_t *buf, size_t count, void ***retArray) { size_t retVal = (count >= 0 ? count : buf->elCount); if (retVal ==
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;
}
注意,buf分配得很好(我检查了每个值和指针,buf->elCount的当前值是1(我也使用printf检查了这个值)
我认为我使用的虚拟机也没有问题,因为其他程序运行得很好
size_t(-1) = 18446744073709551615
您可能刚用完内存:)我使用的类型大小\u t是无符号的,将-1作为参数传递将导致此类错误对于初学者,此语句大小\u t retVal=(count>=0?count:buf->elCount);没有意义。
size\u t
是无符号类型。所以-1
在分配给大小时变成了一个巨大的值。哦,天啊,那是对的,为什么我这么笨?还有@vladfromscow它是一个sizeof(void*),它有sense@NokiStrawby我建议删除问题并更新代码,然后用新的更新代码提问。
size_t(-1) = 18446744073709551615