我正在研究结构如何在C语言中工作,以及如何在函数内部传递和使用它们。我不完全了解结构对象的行为以及如何使用带有malloc函数的内存分配初始化它们的方式。
我定义了一个名为fARRAY的结构和其他参数,如下所示:
float m = 0.98;
float K = 360.0;
typedef structu {
float* array;
size_t len;
} fARRAY;
// functions prototypes
fARRAY operation1(float,float,fARRAY);
fARRAY operation2(fARRAY);
然后,我希望使用此结构将float数据类型及其长度存储在size_t数据类型中。然后,我还要将其传递给名为operation1和operation2的函数,如下所示:
// Function definition. S is the structure,which I will define latter
fARRAY operation1(float m,float K,fARRAY S) {
fARRAY R = {(float*)malloc(sizeof(S.len)),S.len};
for(int i = 0; i < R.len; i++) {
R.array[i] = m * (S.array[i] / (K + S.array[i]));
}
return R;
}
fARRAY operation2(fARRAY A) {
printf("Here inside operation2\n");
printf("Length of A array: %d",A.len);
fARRAY iA = {(float*)malloc(sizeof(A.len)),A.len};
for(int i = 0; i < iA.len; i++) {
iA.array[i] = 1 / A.array[i];
}
return iA;
}
在定义函数之后,我编写了以下主要函数:
int main() {
float a[] = {50,100,150,200,400};
size_t len = sizeof(a) / sizeof(a[0]);
fARRAY S = {a,len};
fARRAY MIUS = operation1(m,K,S);
printf("Print MIUS array\n");
for(int i = 0; i < MIUS.len; i++) {
printf("%f ",MIUS.array[i]);
}
printf("\n");
fARRAY iS = operation2(S);
printf("Printing iS array\n");
return 0;
}
该代码已使用GNU C编译器版本8成功编译。我未使用其他标志对其进行编译。以下是我获得的错误输出。
打印MIUS数组
0.119512 0.213043 0.288235 0.350000 0.515790
在此进行内部操作2
malloc():损坏的最大大小
已中止(核心已弃用)
分析这种情况。 在operation2打印以筛选短语“ Here inside operation 2”之后出现错误,这意味着由于访问fARRAY iA成员len可能会出现错误。我认为这可能会导致核心转储,但是malloc函数中也存在损坏的最大大小错误。我的问题是:为什么operation1可以正常运行,而在operation2上会引发错误?尽管这两个函数的定义都非常相似。