1

我一直在为 C 语言中的一个简单任务而苦苦挣扎……(已经有一段时间了。)我需要构建一个函数来创建和重置结构数组而不使用任何内存分配函数。

我最初是用malloc设计的:

typedef struct {
    int ..
    int ..
} Branch;

Branch* createBranchList (int N)
{
    Branch *List;
    Branch reSet = {0}; // a zero'd Branch struct used for the resetting process
    int i;

    if(!(List=(Branch*)malloc(sizeof(Branch)*N))){
        printf("Allocation error");
        return NULL;
    }

    for(i=0; i<N; i++)
        List[i] = reSet;

    return List;
}

现在如何在不使用内存分配的情况下做到这一点?我可以返回参考吗?我不这么认为。

感谢任何人的帮助。

4

1 回答 1

6

安全方法(一):

定义一个带有数组成员的结构,然后返回它。

例如:

struct MyContainer {
    Thing x[42];
};

MyContainer foo(void) {
    MyContainer m;
    m.x[0] = 5;
    m.x[1] = 10;
    ...
    return m;
}

显然,如果函数在编译时不知道数组大小,则此方法将不可行。

安全方法(2):

让调用者将数组作为参数传入。

例如:

foo(Thing *things, int N) {
    thing[0] = 5;
    thing[1] = 10;
    ...
}

不安全的方法:

声明一个静态局部数组,并返回一个指向它的指针。

这“有效”是因为静态数组在超出范围时不会被释放。但这是不安全的,因为下次使用该函数时数组将被覆盖(在多线程场景中尤其糟糕)。

如果函数在编译时不知道数组大小,则此方法也将不可行。

于 2012-04-06T13:30:07.590 回答