Re: Why this program fails for larger input value ?
- From: jt@xxxxxxxxxxx (Jens Thoms Toerring)
- Date: 29 Apr 2008 19:38:16 GMT
pereges <Broli00@xxxxxxxxx> 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);
Using calloc() here is a waste of time - setting the bits of
the elements of the structures does not guarantee that the
values they contain are initialized to 0 as long as they're
not integers. So malloc() would be faster since it doesn't
have to zero all the memory.
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);
/* This the place where the error occurs */
unsigned long int xi, yi;
for ( yi = 0; yi <= numpointsy; ++yi)
{
for (xi = 0; xi <= numpointsx; ++xi)
You're using elements past the end of the array you allocated.
'yi' must always be less than 'numpointsy' and 'xi' less
than 'numpointsx'. Or you would have to allocate an array
with '(numpointsy + 1) * (numpointsx +1)' elements.
{Regards, Jens
pointinarray[i].x = xmin + xi * xsize;
pointinarray[i].y = ymin + yi * ysize;
++i;
}
}
--
\ Jens Thoms Toerring ___ jt@xxxxxxxxxxx
\__________________________ http://toerring.de
.
- References:
- Why this program fails for larger input value ?
- From: pereges
- Why this program fails for larger input value ?
- Prev by Date: Re: K&R2 , exercise 7.6
- Next by Date: Re: K&R2 , exercise 7.6
- Previous by thread: Why this program fails for larger input value ?
- Next by thread: Why this program fails for larger input value ?
- Index(es):