在switch语句块中声明的自由变量
我有一个switch语句,它在每个case块内声明不同的变量。 我想在例程结束时释放这些变量,但编译器会抛出一个错误,即标识符“变量名称”未定义。 我不想在switch语句之前声明这些变量。 我该如何解决这个错误? 这是伪代码:
int CaseType;
switch(CaseType){
Case 1:
{
double *a = malloc(100 * sizeof(double));
<< some operation here >>
break;
}
Case 2:
{
double *b = malloc(200 * sizeof(double));
<< some operation here >>
break;
}
}
if (CaseType == 1) free(a);
if (CaseType == 2) free(b);
关于如下代码:
case 1:
{
double *a = malloc(100 * sizeof(double));
<< some operation here >>
break;
}
的寿命a
是完全由括号中指定的块内的{}
该对象在该块之后不存在。
在相同范围内(即,在break
之前)释放变量会更加正常:
case 1: {
double *a = malloc(100 * sizeof(double));
<< some operation here >>
free(a);
break;
}
但是,如果你想在这个点之后使用它,你可以在大括号之前创建这些对象,以便稍后访问它们,例如:
double *a = NULL, *b = NULL;
switch(CaseType){
case 1: {
a = malloc(100 * sizeof(double));
<< some operation here >>
break;
}
case 2: {
b = malloc(200 * sizeof(double));
<< some operation here >>
break;
}
}
// Do something with a and/or b, ensuring they're not NULL first.
free(a); // freeing NULL is fine if you haven't allocated anything.
free(b);
顺便说一句,您应该始终假定受到失败(如malloc
)的调用在某个时刻会失败,并相应地进行编码。 我会给你<< some operation here >>
怀疑,这些代码存在于<< some operation here >>
部分:-)
变量只能在声明它们的代码块中引用。由于每个开关情况都有自己的块,指针不能从该块外部释放。
有几种方法可以解决这个问题。 例如,您可以释放每个开关盒末端的指针(中断之前),或者您可以在开关之前声明指针变量,这样可以从外部看到它。
链接地址: http://www.djcxy.com/p/84401.html上一篇: Free variables that are declared inside switch statement blocks