Następujący program zostanie zabity przez jądro po wyczerpaniu się pamięci. Chciałbym wiedzieć, kiedy zmienna globalna powinna zostać przypisana do "ENOMEM".Kiedy należy przypisać errno do 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);
}
Podobnie jak dodatkowe wskazówki. Nie rzucaj zwrotu 'malloc'. Przesyłanie go do 'void *' jest szczególnie dziwne, ponieważ * jest * typem zwracanym. Jeśli czujesz taką potrzebę, prawdopodobnie zapomniałeś dodać "stdlib.h". Następnie nowoczesne kompilatory języka C (i wszystkie z nich są nowoczesne w tym znaczeniu) mają typ Boolean. Dołącz "stdbool.h" i użyj odpowiednio 'bool',' false' i 'true'. –