Here is my code for a program that adds and multiplies two complex numbers:

main.c

Code:#include <stdio.h> #include "complex.h" int main ( int argc , char *argv[] ) { comp *ptr1, *ptr2, *j, *k, *sum, *product; double r, i; printf ( "Enter first complex number-\n" ); printf ( "Enter real part: " ); scanf ( "%d", &r ); printf ( "Enter imaginary part: " ); scanf ( "%d", &i ); load_complex ( ptr1, r, i ); printf ( "Enter second complex number-\n" ); printf ( "Enter real part: " ); scanf ( "%d", &r ); printf ( "Enter imaginary part: " ); scanf ( "%d", &i ); load_complex ( ptr2, r, i ); add_complex ( sum, ptr1, ptr2 ); retrieve_complex ( sum, j, k ); printf ( "Sum is %lf%lf\n", sum->real, sum->imaginary ); multiply_complex ( product, ptr1, ptr2 ); retrieve_complex ( product, j, k ); printf ( "Product is %lf%lf\n", product->real, product->imaginary ); return ( 0 ); }complex.h and complex.c:

Code:/* complex.h */ typedef struct { double real; double imaginary; } comp; extern void load_complex ( comp *p_complex, double real, double imaginary ); extern void retrieve_complex ( comp *p_complex, double *p_real, double *imaginary ); extern void add_complex ( comp *p_sum, comp *p_complex1, comp *p_complex2 ); extern void multiply_complex ( comp *p_product, comp *p_complex1, comp *p_complex2 ); } /* complex.c */ #include "complex.h" extern void load_complex ( comp *p_complex, double real, double imaginary ) { p_complex->real = real; p_complex->imaginary = imaginary; } extern void retrieve_complex ( comp *p_complex, double *p_real, double *p_imaginary ) { *p_real = p_complex->real; *p_imaginary = p_complex->imaginary; } extern void add_complex ( comp *p_sum, comp *p_complex1, comp *p_complex2 ) { p_sum->real = p_complex1->real + p_complex2->real; p_sum->imaginary = p_complex1->imaginary + p_complex2->imaginary; } extern void multiply_complex ( comp *p_product, comp *p_complex1, comp *p_complex2 ) { p_product->real = p_complex1->real * p_complex2->real - p_complex1->imaginary * p_complex2->imaginary; p_product->imaginary = p_complex1->real * p_complex2->imaginary * p_complex1->imaginary * p_complex2->real; }I'm receiving seg faults at the load_complex function ( gdb ), but I don't know what's wrong with the function. Originally, I was able to enter two complex numbers and then it seg faulted at retrieve, but for some reason now it's seg'n at the load's.. any ideas?