我一直在努力处理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;
}
现在如何在不使用内存分配的情况下执行此操作?我可以退回参考吗?我不这么认为。
感谢任何人的帮助。
答案 0 :(得分:6)
安全方法(1):
使用数组成员定义结构,然后返回该结构。
e.g:
struct MyContainer {
Thing x[42];
};
MyContainer foo(void) {
MyContainer m;
m.x[0] = 5;
m.x[1] = 10;
...
return m;
}
显然,如果在编译时函数不知道数组大小,则无法使用此方法。
安全方法(2):
让调用者作为参数传入数组。
e.g:
foo(Thing *things, int N) {
thing[0] = 5;
thing[1] = 10;
...
}
不安全的方法:
声明一个静态本地数组,并返回指向该数组的指针。
这“有效”,因为静态数组在超出范围时不会被释放。但它不安全,因为下次使用该函数时将覆盖该数组(在多线程场景中尤其糟糕)。
如果在编译时函数不知道数组大小,也不可能使用此方法。