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)
现在如何在不使用内存分配的情况下执行此操作?我可以退回参考吗?我不这么认为.
谢谢任何人的帮助.
安全方法(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)
不安全的方法:
声明一个静态本地数组,并返回一个指针.
这"有效",因为静态数组在超出范围时不会被释放.但它不安全,因为下次使用该函数时会覆盖该数组(在多线程场景中尤其糟糕).
如果在编译时函数不知道数组大小,则也无法使用此方法.