Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中的结构中存储可变长度数组_C_Arrays_Pointers_Struct - Fatal编程技术网

如何在C中的结构中存储可变长度数组

如何在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

我想在一个结构中存储一个可变长度数组,为此我使用了一个指针。但是,如果检索存储的数组,则会返回错误的值。在下面的示例中,我得到了输出“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;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
指向一个不再存在的数组。