/*
* Types of defects: Invalid memory access to already freed area(Dangling pointers)
* Complexity: When using a pointer to int in a recursive function
*/
int invalid_memory_access_005 (int count)
{
	int *ptr ;

	if (count ==0)
	{
    	count = *ptr; /*Tool should detect this line as error*/ /*ERROR:Invalid memory access to already freed area*/
		return 1;
	}
    else
    {
    	ptr = (int *) calloc (count,sizeof(int));
    	if(ptr!=NULL)
    	{
    		*(ptr+(count-1)) = 5*count;
    	    free(ptr);
    	}
    	return (count * invalid_memory_access_005(count-1));
    }
}
void invalid_memory_access_main ()
{
	if (vflag == 1 || vflag ==888)
	{
		invalid_memory_access_001();
	}

	if (vflag == 2 || vflag ==888)
	{
		invalid_memory_access_002();
	}

	if (vflag == 3 || vflag ==888)
	{
		invalid_memory_access_003();
	}

	if (vflag == 4 || vflag ==888)
	{
		invalid_memory_access_004();
	}

	if (vflag == 5 || vflag ==888)
	{
		invalid_memory_access_005 (5);
	}

	if (vflag == 6 || vflag ==888)
	{
		invalid_memory_access_006();
	}

	if (vflag == 7 || vflag ==888)
	{
		invalid_memory_access_007();
	}

	if (vflag == 8 || vflag ==888)
	{
		invalid_memory_access_008();
	}

	if (vflag == 9 || vflag ==888)
	{
		invalid_memory_access_009();
	}

	if (vflag == 10 || vflag ==888)
	{
		invalid_memory_access_010();
	}

	if (vflag == 11 || vflag ==888)
	{
		invalid_memory_access_011();
	}

	if (vflag == 12 || vflag ==888)
	{
		invalid_memory_access_012();
	}

	if (vflag == 13 || vflag ==888)
	{
		invalid_memory_access_013();
	}

	if (vflag == 14 || vflag ==888)
	{
		int i;
		i = invalid_memory_access_014 (1);
                sink = i;
	}

	if (vflag == 15 || vflag ==888)
	{
		invalid_memory_access_015();
	}

	if (vflag == 16 || vflag ==888)
	{
		invalid_memory_access_016();
	}

	if (vflag == 17 || vflag ==888)
	{
		invalid_memory_access_017();
	}
}