Il seguente programma viene ucciso dal kernel quando la memoria è esaurita. Vorrei sapere quando la variabile globale dovrebbe essere assegnata a "ENOMEM".Quando si deve assegnare erroneamente a ENOMEM?
#define MEGABYTE 1024*1024
#define TRUE 1
int main(int argc, char *argv[]){
void *myblock = NULL;
int count = 0;
while(TRUE)
{
myblock = (void *) malloc(MEGABYTE);
if (!myblock) break;
memset(myblock,1, MEGABYTE);
printf("Currently allocating %d MB\n",++count);
}
exit(0);
}
suggerimenti Proprio come aggiuntivi. Non eseguire il ritorno di 'malloc'. Lanciarlo a 'void *' è particolarmente strano dal momento che * è * il tipo di ritorno. Se ne senti il bisogno, probabilmente hai dimenticato di includere "stdlib.h". Quindi i compilatori C moderni (e su Linux tutti sono moderni in questo senso) hanno un tipo booleano. Includi "stdbool.h" e usa 'bool',' false' e 'true' in modo appropriato. –