我有一个复数数组,想在数组的第一个位置添加一个新的复数。
我有一个结构和一个函数,它在数组的第一个位置输入一个新的复数。
我有一个包含复数的结构
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/