0

我有一个关于正确使用语法的快速问题,基本上我试图将这两个 if 语句总结为一个 if 语句。

if (sc.LastCallToFunction) {
    if (p_LowRectanglesList != NULL) {
        free(p_LowRectanglesList);
        sc.PersistVars->i1 = 0;
    }
    if (p_HighRectanglesList != NULL) {
        free(p_HighRectanglesList);
        sc.PersistVars->i2 = 0;
    }
    return;

将其重写为在语法上是否正确:

if (sc.LastCallToFunction) {
    if (p_LowRectanglesList || p_HighrectangleList != NULL) {
        free(p_LowRectanglesList && p_HighRectanglesList);
        sc.PersistVars->i1 && sc.PersistVars->i2 = 0;
    }
    return;

或者编译器不会接受这个/我的逻辑有问题吗?

4

1 回答 1

0

你不能按照你给的方式去做

if (p_LowRectanglesList || p_HighrectangleList != NULL)

这在逻辑上将第一个指针(将其视为真或假)与第二个指针与 NULL 的比较

free(p_LowRectanglesList && p_HighRectanglesList);

这在逻辑上 && 将指针组合在一起,然后尝试释放该操作的结果。即,您正在尝试释放“真”或“假”

sc.PersistVars->i1 && sc.PersistVars->i2 = 0;

这在逻辑上将两件事结合在一起,这将导致真或假,然后尝试将 0 分配给它......根本没有任何意义。

另外,在您的原始代码中......在免费之后,您应该放p_LowRectanglesList=NULL;

于 2013-07-18T20:57:36.763 回答