如何在不使用malloc的情况下从函数返回数组?

ldd*_*ter 1 c memory arrays pointers return

我一直在努力处理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;
}
Run Code Online (Sandbox Code Playgroud)

现在如何在不使用内存分配的情况下执行此操作?我可以退回参考吗?我不这么认为.

谢谢任何人的帮助.

Oli*_*rth 6

安全方法(1):

使用数组成员定义结构,然后返回该结构.

例如:

struct MyContainer {
    Thing x[42];
};

MyContainer foo(void) {
    MyContainer m;
    m.x[0] = 5;
    m.x[1] = 10;
    ...
    return m;
}
Run Code Online (Sandbox Code Playgroud)

显然,如果在编译时函数不知道数组大小,则无法使用此方法.

安全方法(2):

让调用者作为参数传入数组.

例如:

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

不安全的方法:

声明一个静态本地数组,并返回一个指针.

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

如果在编译时函数不知道数组大小,则也无法使用此方法.