Chương trình sau bị hạt nhân giết khi bộ nhớ bị hết. Tôi muốn biết khi nào biến toàn cục nên được gán cho "ENOMEM".Khi nào nên không được gán cho 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);
}
Cũng giống như thêm gợi ý. Không bỏ trả lại 'malloc'. Việc đưa nó vào 'void *' đặc biệt kỳ lạ vì đó * là * kiểu trả về. Nếu bạn cảm thấy cần thiết cho nó, bạn có thể quên bao gồm "stdlib.h". Sau đó, trình biên dịch C hiện đại (và trên Linux tất cả đều hiện đại theo nghĩa đó) có kiểu Boolean. Bao gồm "stdbool.h" và sử dụng 'bool',' false' và 'true' một cách thích hợp. –