0

I have a problem where I have this structure

typedef struct _COMPLEX {
    double real, imag;
}COMPLEX;

and I need to declare an array of this structure and sum the elements of the array. Here is my code.

#include <stdio.h>
#include <stdlib.h>
void* xmalloc(size_t nrOcteti);

int main()
{
    COMPLEX* v = 0, *s = 0;
    int n, i;
    printf("\n n = ");
    scanf("%d", &n);
    v = (COMPLEX*)xmalloc((n)*sizeof(COMPLEX));
    s = (COMPLEX*)xmalloc(sizeof(COMPLEX));
    for(i = 0; i < n; i++)
    {
        printf("\n v[%d].real and imag:", i);
        scanf("%lf %lf", &v[i].real, &v[i].imag);
    } 
    for(i = 0; i < n; i++)
        printf("V%d after scan=%.2lf + %.2lf * i\n", i, v[i].real, v[i].imag);
    s->real = 0; s->imag = 0;
    for(i = 0; i < n; i++)
    {
        s->real = s->real + v[i].real;
        s->imag = s->imag + v[i].imag;
    }
    for(i = 0; i < n; i++)
        printf("V%d after sum=%.2lf + %.2lf * i\n", i, v[i].real, v[i].imag);
    printf("\nS=%lf + %lf\n", s->real, s->imag);
    if(s) free(s);
    s = 0;
    if(v) free(v);
    v = 0;
    return 0;
}
void* xmalloc(size_t nrOcteti)
{
    void *p = 0;
    p = malloc(sizeof(nrOcteti));
    if(!p)
    {
        fprintf(stderr, "Allocation failed!");
        exit(EXIT_FAILURE);
    }
    return p;
}

After I give the elements of the array I print them everything is alright, but just before the sum the elements of the array are changed(and for multiple test, apparently the element with the index 2 is modified) and the sum at the end is incorrect. And sometimes(I think because of different inputs) it gives me at the end Segmentation fault because of the free(). The array and sum needs to be pointers to that struct and need to be dynamically allocated. I tried many times and I can't manage to make it work properly. If somebody can help me solve this it will be a blessing =))

  • Side note: casting results of `malloc()` is [considered as a bad practice](https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – MikeCAT Apr 22 '21 at 13:56
  • Thank you for the tip! I have a teacher that knows only one thing and I need to do everything like him :/ Do you have a good material for learning programming in general? The programs I make needs to be exactly how my teacher wants them and I don't learn so much by doing so. – Denis Plescan Apr 22 '21 at 15:11

1 Answers1

1

The line

    p = malloc(sizeof(nrOcteti));

in the function xmalloc() is wrong. This line is ignoring what is passed as the argument and just allocating for one size_t.

It should be

    p = malloc(nrOcteti);

to allocate specified size.

MikeCAT
  • 73,922
  • 11
  • 45
  • 70