如何在C中的结构中存储可变长度数组
我想在一个结构中存储一个可变长度数组,为此我使用了一个指针。但是,如果检索存储的数组,则会返回错误的值。在下面的示例中,我得到了输出“10”,而您期望的是输出“12”如何在C中的结构中存储可变长度数组,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,我想在一个结构中存储一个可变长度数组,为此我使用了一个指针。但是,如果检索存储的数组,则会返回错误的值。在下面的示例中,我得到了输出“10”,而您期望的是输出“12” #包括 typedef结构灵活性{ int*flex; }灵活性; 灵活性计算灵活性() { int a[2]; a[0]=1; a[1]=2; 灵活性f; f、 flex=a; 返回f; } void main() { 灵活性f; f=计算灵活性(); int i; 对于(i=0;iflex指向不再存在的数组。a从calcula
#包括
typedef结构灵活性{
int*flex;
}灵活性;
灵活性计算灵活性()
{
int a[2];
a[0]=1;
a[1]=2;
灵活性f;
f、 flex=a;
返回f;
}
void main()
{
灵活性f;
f=计算灵活性();
int i;
对于(i=0;i<2;i++)
{
fprintf(stdout,“%i”,*(f.flex+i));
}
}
在函数计算灵活性中创建临时变量a
,然后存储指向f.flex
变量的指针,但函数结束后-a
从内存中消失,因此f.flex
指针现在不指向任何地方
如果你想拥有真正可变的长度,你应该这样做:
Flexibility calculateFlexibility()
{
Flexibility f;
f.flex = (int*)malloc(....);
return f;
}
在课程结束时:
free(f.flex);
对于malloc的正确参数,我建议您阅读:您正在函数calculateFlexibility
中创建临时变量a
,然后存储指向f.flex
变量的指针,但函数结束后-a
从内存中消失,因此f.flex
指针现在不指向任何地方
如果你想拥有真正可变的长度,你应该这样做:
Flexibility calculateFlexibility()
{
Flexibility f;
f.flex = (int*)malloc(....);
return f;
}
在课程结束时:
free(f.flex);
对于malloc的正确参数,我建议您阅读:a
从calculateFlexibility
返回时超出范围,因此f->flex
指向不再存在的数组。a
从calculateFlexibility
返回时超出范围,因此f->flex
指向一个不再存在的数组。