我的情况是
int main()
{
if(some_condition)
{
//some code
}
else
{
char *a[] = { "","",...};
char b[size] = {};
}
if(some_other_condition)
{
// some code
}
else
{
char *a[] = { "","",...};
char b[size1] = {};
}
}
所以我的问题是
我需要如上所示的指针数组和整数数组,并且在我的函数中有多个这样的if()else
个案例。那么哪种方法更好呢?截至目前,我已将我的数组放在需要的位置,如上所示。
将所有内容放在函数开头并在需要时使用它们的另一种选择。
int main()
{
char *a[some_big_size];
char b[size_big];
if()
{
//some_code
}
else
{
for(i=0;i<n;i++)
{
a[i] = malloc(len);
strlcpy(a[i],"string",len);
}
for(i=0;i<n;i++)
{
b[i] = val;
}
}
}
请告诉我以上哪两个选项?我已经了解到declare variables when needed
所以我想知道你们的想法。
或
是否有不同的方法来实现这一目标?
答案 0 :(得分:1)
我相信你的第一个代码示例更好。声明自定义大小的数组将比声明单个“一刀切”数组更容易捕获越界错误。一个小小的好处是你只需要在真正需要的时候分配内存,但你的阵列必须非常重要。
答案 1 :(得分:0)
我可以想到以下条件:
如果不同else
块中的数组引用相同的内存:
像在后一种情况下那样声明它们一次。
如果不同else
块中的数组引用内存中的不同结构:
一个。如果要在各自的else
区块之外使用它们,则声明一次
湾如果它们的范围仅限于该块,则在每个else
块中以不同方式声明它们!
答案 2 :(得分:0)
要有条件地分配堆栈变量alloca()
应该使用:
char **a = (char **)alloca(sizeof(char *) * (some_condition ? size1 : size2));
在堆栈上分配内存时,不需要free()
或其他任何内容。
P.S。如果实际代码对于所有条件大致相同,那么最好不要有多个if
和else
- 只有?:
个alloca
运算符。< / p>
但如果它根据some_condition
的不同而不同,那么最好有完全不同的子程序来独立解决任务。