使用指向该结构的指针对数组结构的元素求和

时间:2021-04-22 13:53:02

标签: arrays c pointers struct

我有这个结构的问题

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() 而给我分段错误。 数组和总和需要是指向该结构的指针,并且需要动态分配。 我尝试了很多次,但无法使其正常工作。 如果有人能帮我解决这个问题,那将是一种祝福 =))

1 个答案:

答案 0 :(得分:1)

线

    p = malloc(sizeof(nrOcteti));

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

应该是

    p = malloc(nrOcteti);

分配指定的大小。