我有这个结构的问题
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 * 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;
}
在我给出数组的元素后,我将它们打印出来,一切都很好,但就在求和之前,数组的元素发生了变化(对于多次测试,显然索引为 2 的元素被修改了),总和在结局不正确。有时(我认为是因为不同的输入)它最终会因为 free() 而给我分段错误。 数组和总和需要是指向该结构的指针,并且需要动态分配。 我尝试了很多次,但无法使其正常工作。 如果有人能帮我解决这个问题,那将是一种祝福 =))
答案 0 :(得分:1)
线
p = malloc(sizeof(nrOcteti));
函数中的 xmalloc()
是错误的。这一行忽略了作为参数传递的内容,只分配了一个 size_t
。
应该是
p = malloc(nrOcteti);
分配指定的大小。