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
相关产品推荐
相关产品推荐

