0

I have defined a dynamic array this way:

double   *n_data ;
int n_data_c = 0, n_cnt = 0;
n_data_c = count_lines_of_file("abnorm");
n_data = (double *)malloc(n_data_c * sizeof(double));

in a loop I calculate distance and do so:

n_cnt++;
n_data[n_cnt] = distance;

but it returns segmentation fault here : n_data[n_cnt] = distance;

I want to know if I'm doing something wrong.

Peggy
  • 639
  • 9
  • 28

4 Answers4

3

Check what malloc returned, if it returned 0, then it failed. More likely, I think, is your n_cnt is out of bounds. If it's negative, or greater than or equal to n_data_c, then you'll get a segfault.

Luke
  • 708
  • 5
  • 13
0

You are overrunning your array buffer..

Compare n_cnt with n_data_c and only access the array if n_cnt < n_data_c/

n_cnt++;
if (n_cnt < n_data_c)
{
n_data[n_cnt] = distance;
}
Mukt G
  • 101
  • 3
  • `n_data_c` is 7 as my file has 7 lines and `n_cnt` is 1 at first iteration and then it returns segfault. – Peggy Feb 19 '14 at 07:03
0

n_data_c = count_lines_of_file("abnorm");

this is generating the segmentation fault. Check the value of n_data_c

G one
  • 2,679
  • 2
  • 14
  • 18
  • @G one: I checked it, it returns 7 as my file has 7 lines. – Peggy Feb 19 '14 at 06:34
  • `int n_data_c = 7, n_cnt = 0; n_data = (double *)malloc(n_data_c * sizeof(double)); n_cnt++; n_data[n_cnt] = 10;` I tried this and its not giving me any seg fault printf("%f", n_data[n_cnt]); – G one Feb 19 '14 at 06:37
  • Did you check passing of parameters into the `calculatedistance()` are they correct?? – G one Feb 19 '14 at 07:55
0

Just try printing the value of n_data_c before mallocing.