Mail Archives: djgpp/1992/06/03/18:38:19
I tried compiling the following program with djgcc:
==========================
/* memory.c - allocate memory until out */
struct item
{
int number;
char string[100000];
struct item *next;
} *list;
main ()
{
struct item *ptr;
int i=0;
list = ptr = (struct item *) malloc (sizeof (struct item));
while (ptr)
{
ptr->number = i++;
printf ("Current pointer: %p Number of objects: %d Memory used: %d\n",
ptr, i, i * sizeof (struct item));
ptr = ptr->next = (struct item *) malloc (sizeof (struct item));
}
printf ("Current pointer: %p Number of objects: %d Memory used: %d\n",
ptr, i, i * sizeof (struct item));
}
=========================
It is supposed to keep allocating memory until there is no more memory
left, at which point I expected to get a NULL pointer returned from
malloc(). Instead, I got this error:
Fatal! disk full writing to swap file
When I increased the size of the array item.string to 1 000 000 or
10 000 000, my PC froze and I had to reboot. When I increased it to
100 000 000, I got the error
Segmentation violation in pointer 0xe8421000 at 40:1318
Exception 14 at eip=1318
Shouldn't malloc just return a NULL pointer? I have some
memory-hogging programs that depend on that for error checking.
- Raw text -