comp.lang.c
[Top] [All Lists]

Re: Why this program fails for larger input value ?

Subject: Re: Why this program fails for larger input value ?
From: santosh
Date: Wed, 30 Apr 2008 01:42:15 +0530
Newsgroups: comp.lang.c

pereges wrote:

> #include <stdio.h>
> #include <math.h>
> #include <stdlib.h>
> 
> int main(void)
> {
> unsigned long int numpoints;
> printf("Enter num of points\n");
> scanf("%lu", &numpoints);
>        unsigned long int numpointsx = sqrt((double)numpoints);
>        unsigned long int numpointsy = sqrt((double)numpoints);
>         numpoints = numpointsx * numpointsy;
>        unsigned long int i =  0;
> typedef struct point
>     {
> float x, y;
>       } point;
> point *pointinarray;
> 
> pointinarray = calloc(sizeof(point), numpoints);
> float xlength, ylength;
> xlength = ylength = 20;
> float xmin, ymin;
>        xmin = ymin  = -10;
> float xmax, ymax;
> xmax = ymax  = 10;
>       float xsize = xlength /( numpointsx-1);
>       float ysize = ylength / (numpointsy-1);
> 
>        printf("%u\n", numpoints);

You want the %lu conversion specifier here.

> unsigned long int xi, yi;
> 
> /* I'm confident the error is here */
> for ( yi = 0; yi <= numpointsy; ++yi)
>     {
>             for (xi = 0; xi <= numpointsx; ++xi)
>          {
>                 pointinarray[i].x = xmin + xi * xsize;
>                 pointinarray[i].y = ymin + yi * ysize;
>                 ++i;
>           }
>     }
> 
> 
>     printf("i: %lu xmax: %f ymax: %f\n",i, pointinarray[i-1].x,
> pointinarray[i-1].y);
>     return 0;
> 
> }
> 
> The program is working for anything upto 60000 or so but fails for
> anything greater eg. 100000

Why don't you put in a series of printf statements to print out the
values of your variables at selected points in the program. Then you
might be able to narrow down the point of failure. Alternatively you
could step through the program in a debugger.


<Prev in Thread] Current Thread [Next in Thread>
Privacy Policy