c-将数组结构的元素与指向该结构的指针求和



我有一个问题,我有这个结构

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

我需要声明这个结构的数组,并对数组的元素求和。这是我的密码。

#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 * in", 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 * in", i, v[i].real, v[i].imag);
printf("nS=%lf + %lfn", 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;
}

在我给出数组的元素后,我打印它们,一切都很好,但就在求和之前,数组的元素发生了变化(对于多次测试,显然索引为2的元素被修改了(,并且末尾的求和不正确。有时(我认为是因为输入不同(,它在最后会因为free((而导致分段错误。数组和sum需要是指向该结构的指针,并且需要动态分配。我试了很多次,都没能使它正常工作。如果有人能帮我解决这个问题,那将是一件幸事

p = malloc(sizeof(nrOcteti));

函数CCD_ 1中的错误。这一行忽略了作为参数传递的内容,只分配了一个size_t

应该是

p = malloc(nrOcteti);

以分配指定的大小。

最新更新