gpt4 book ai didi

c - 在 switch 语句 block 内声明的自由变量

转载 作者:行者123 更新时间:2023-11-30 18:19:35 25 4
gpt4 key购买 nike

我有一个 switch 语句,它在每个 case block 内声明不同的变量。我想在例程结束时释放这些变量,但编译器会抛出一个错误,表明标识符“变量名”未定义。我不想在 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生命周期完全在大括号 {} 指定的 block 内。该对象在该 block 之后不存在。

在同一范围内释放变量会更正常(即紧接 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 >> 中。部分:-)

关于c - 在 switch 语句 block 内声明的自由变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48858444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com