2

我想将一个可变长度数组存储在一个结构中,为此我使用了一个指针。但是,如果我检索存储的数组,我会得到错误的值。在下面的示例中,我得到输出“1 0”,而您期望输出“1 2”。

#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));
    }

}
4

1 回答 1

4

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

于 2013-10-18T01:37:20.560 回答