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

查找数组公共元素结果异常问题排查

问题分析与修复

你的代码核心问题是**result数组的内存越界**:

  • 你初始化int result[] {0};时,这个数组只分配了能容纳1个整数的内存空间。
  • 当找到第2个及以后的公共元素时,counter递增后写入result[counter],本质是在访问数组范围外的内存,这属于C++里的未定义行为,会导致输出随机的垃圾值(就是你看到的1 10 10这类奇怪数字)。

另外还有个潜在问题:如果输入数组存在重复元素,你的嵌套循环会重复添加同一个公共元素,不过你的测试数据里暂时没出现这种情况。

修复后的代码

#include <iostream>

void common_elements(int array_1[], int array_2[]){
    // 定义足够大的数组,匹配输入数组的最大可能长度
    int result[10] = {0};
    int counter{0};
    
    for (int i{0}; i < 10; i++){
        for (int j{0}; j < 10; j++){  
            if (array_2[i] == array_1[j]){
                // 检查元素是否已存在,避免重复添加
                bool is_duplicate = false;
                for (int k = 0; k < counter; k++) {
                    if (result[k] == array_1[j]) {
                        is_duplicate = true;
                        break;
                    }
                }
                if (!is_duplicate) {
                    result[counter] = array_1[j];
                    counter++;
                }
                break; // 找到匹配后跳出内层循环,减少无效遍历
            }
        }
    }
    if (counter == 0) {
        std::cout << "There are 0 common elements";
    } else {
        std::cout << "There are " << counter << " common elements they are : ";
        for (int k{0}; k < counter; k++){
            std::cout << result[k] << " ";
        }
    }
}

int main(){
    int data1[] {1,2,4,5,9,3,6,7,44,55}; 
    int data2[] {11,2,44,45,49,43,46,47,55,88};
    common_elements(data1,data2);
    return 0;
}

关键修复点

  1. 调整result数组大小:设为10(和输入数组长度一致),确保能容纳所有可能的公共元素。
  2. 新增重复检查逻辑:避免同一个公共元素被多次写入结果数组。
  3. 优化循环效率:找到匹配元素后立即跳出内层循环,减少不必要的遍历。

运行修复后的代码,就能得到预期的2 44 55输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:50:32