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 =))

2
  • Side note: casting results of malloc() is considered as a bad practice. Commented Apr 22, 2021 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. Commented Apr 22, 2021 at 15:11

1 Answer 1

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I rewrote the program a couple of times and in a hurry I wrote the function wrong. Have a nice day!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.