Why this program fails for larger input value ?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • pereges

    Why this program fails for larger input value ?

    #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)nu mpoints);
    unsigned long int numpointsy = sqrt((double)nu mpoints);
    numpoints = numpointsx * numpointsy;
    unsigned long int i = 0;
    typedef struct point
    {
    float x, y;
    } point;
    point *pointinarray;

    pointinarray = calloc(sizeof(p oint), 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);
    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
  • Kenneth Brody

    #2
    Re: Why this program fails for larger input value ?

    pereges wrote:
    [...]
    typedef struct point
    {
    float x, y;
    } point;
    point *pointinarray;
    >
    pointinarray = calloc(sizeof(p oint), numpoints);
    [...]
    The program is working for anything upto 60000 or so but fails for
    anything greater eg. 100000
    "Fails", how?

    Pure speculation: the calloc(), for which you do not check for
    failure, is failing on large values of "numpoints" .

    --
    +-------------------------+--------------------+-----------------------+
    | Kenneth J. Brody | www.hvcomputer.com | #include |
    | kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer .h|
    +-------------------------+--------------------+-----------------------+
    Don't e-mail me at: <mailto:ThisIsA SpamTrap@gmail. com>

    Comment

    • santosh

      #3
      Re: Why this program fails for larger input value ?

      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)nu mpoints);
      unsigned long int numpointsy = sqrt((double)nu mpoints);
      numpoints = numpointsx * numpointsy;
      unsigned long int i = 0;
      typedef struct point
      {
      float x, y;
      } point;
      point *pointinarray;
      >
      pointinarray = calloc(sizeof(p oint), 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.

      Comment

      Working...