我有一个复数数组,想在数组的第一个位置添加一个新的复数。
我有一个结构和一个函数,它在数组的第一个位置输入一个新的复数。
我有一个包含复数的结构

struct Complex
{
  float imag;
  float real;
};

我还有一个函数,它在堆上创建这样一个复数的实例
struct Complex* instanceOfComplex(float a, float b)
{
  struct Complex* complex = malloc(sizeof(struct Complex));
  if(complex == NULL)
  {
    return NULL; // out of memory
  }

  complex->imag = a;
  complex->real = b;

  return complex;
}

最后,我有一个函数,它应该在复数数组的第一个位置放置一个新的复数
int attach(struct Complex *complexArray, struct Complex complex, int length)
{
  int i;
  for(i = length; length > 0; i--)
  {
    complexArray[i] = complexArray[i - 1];
  }
  complexArray[i] = complex;

  length++;

  return length;
}

主要功能如下
int main()
{
  float a = 3.6;
  float b = 6.8;

  struct Complex* complex = instanceOfComplex(a, b);

  printf("%f %f\n", complex->imag, complex->real);

  int length = 4;

  struct Complex* complexArray = malloc(sizeof(length + 1) * sizeof(struct Complex));

  complexArray[0] = *instanceOfComplex(8.2, 9.3);
  complexArray[1] = *instanceOfComplex(7.1, 4.6);
  complexArray[2] = *instanceOfComplex(0.1, 2.7);
  complexArray[3] = *instanceOfComplex(5.6, 1.9);

  attach(complexArray, *complex, length);
}

最后,数组应该包含5个复数元素,其中新复数位于complex array[0]位置,其他4个元素是以下元素。
问题出在主函数中,因为所有元素都保持不变(8.2,9.3)。有人能告诉我,这里出什么事了吗?

最佳答案

instanceOfComplex中为新实例分配内存,并返回该内存(即返回指向新分配内存的指针)。
main中,取消引用指针并将值赋给数组元素。
你在失去记忆。Eiter在main中分配指向complex的指针数组,或者在instanceOfComplex中有一个按值返回的局部变量。
正如用户Yakov Dan在他的回答中所说,您错误地分配了main中的内存,这可能会导致您的错误。

关于c - C编程:复数的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54007576/

10-15 01:59