我希望将可变长度数组存储在结构中,并为此使用指针。但是,如果检索存储的数组,则会得到错误的值。在下面的示例中,我得到输出"1 0",而您希望输出“12”。
#include <stdio.h>
typedef struct Flexibility {
int *flex;
} Flexibility;
Flexibility calculateFlexibility()
{
int a[2];
a[0] = 1;
a[1] = 2;
Flexibility f;
f.flex = a;
return f;
}
void main()
{
Flexibility f;
f = calculateFlexibility();
int i;
for(i = 0; i < 2; i++)
{
fprintf(stdout, "%i ", *(f.flex + i));
}
}发布于 2013-10-18 01:37:20
在函数a中创建临时变量calculateFlexibility,然后存储指向f.flex变量的指针,但是函数结束后-- a从内存中消失,所以您的f.flex指针现在指向任何位置。
如果您想拥有真正的可变长度,您应该这样做:
Flexibility calculateFlexibility()
{
Flexibility f;
f.flex = (int*)malloc(....);
return f;
}在节目结束时:
free(f.flex);关于malloc的正确论点,我建议您阅读:http://en.cppreference.com/w/c/memory/malloc
https://stackoverflow.com/questions/19440120
复制相似问题