You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言int**比较函数point_to_smallest_ptr的Bug排查问题

现有代码存在的核心问题

  • 仅修改了函数内部的局部指针变量ptr1、ptr2,没有对传入的二级指针参数first、second做解引用赋值。C语言函数参数是值传递,局部变量的修改完全不会影响外部传入的指针,函数执行后没有任何实际效果。
  • 空指针边界处理逻辑不符合要求:需求要求只要出现空指针,两个入参指针都要指向非空值,现有代码仅修改了对应空指针的局部变量,没有保证两个局部变量都指向同一个非空地址。

修正后的代码实现

void point_to_smallest_ptr(int** first, int** second) 
{
    // 先处理空指针边界
    if (*first == NULL) {
        // 两个都指向非空的second原指向地址
        *first = *second;
        *second = *second;
        return;
    }
    if (*second == NULL) {
        // 两个都指向非空的first原指向地址
        *second = *first;
        *first = *first;
        return;
    }

    // 两个都是有效指针,比较数值
    if (**first <= **second) {
        // 小于等于都用第一个的地址
        *second = *first;
    } else {
        // 大于就用第二个的地址
        *first = *second;
    }
}

逻辑验证说明

  • 空指针场景:如果任意一个入参指向NULL,直接将两个指针都赋值为非空的那个地址,符合边界规则。
  • 有效值比较场景:**first <= **second时两个指针都指向*first的地址,相等场景也符合需求;**first > **second时两个都指向*second的地址,满足指向较小值地址的要求。
  • 所有赋值操作都直接作用于*first和*second,修改会直接同步到外部传入的指针变量,生效逻辑正确。

内容的提问来源于stack exchange,提问作者thedankside909

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:45:00