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

C语言求两数组交集代码运行后vetFinal末尾出现内存垃圾值,问题出在哪?

C语言数组交集代码问题分析

核心错误点

  • 变长数组定义逻辑错误:C语言变长数组的长度在定义时就固定,你初始n=0时定义int v[n];,实际得到的是长度为0的数组,后续修改n的值不会动态扩展数组容量,后续往v里存数据属于越界访问内存,自然会出现垃圾值甚至程序崩溃。
  • 交集元素下标赋值错误:匹配到共同元素时,你用外层循环的i作为v的下标赋值v[i] = u[i];,会导致v数组前面的下标位置没有被初始化,留存的是内存里的原始垃圾数据。
  • 补充:int u[8] = {};属于C++语法,标准C中不允许空初始化列表,建议补全初始化值避免潜在问题。

修正后的代码

#include <stdio.h>

int main(){
    int n = 0;
    int u[8] = {0};
    int w[9] = {0};
    // 交集元素最多不超过8个,直接定义足够容量的数组即可
    int v[8] = {0};

    // 读取第一个数组
    for(int i = 0; i < 8; i++)
    {
      scanf("%i", &u[i]);
    }

    // 读取第二个数组
    for(int i=0; i < 9; i++)
    {
      scanf("%i", &w[i]);
    }

    // 查找交集元素
    for(int i = 0; i < 8; i++)
    {
      for(int j = 0; j < 9; j++)
      {
        if(u[i] == w[j])
        {
          // 用当前交集计数作为下标,赋值后计数+1
          v[n++] = u[i];
          // 匹配到后跳出内层循环,避免同一个元素重复添加
          break;
        }
      }
    }

    // 按示例格式输出结果
    printf("v = {");
    for(int i = 0; i < n; i++)
    {
      if(i > 0) printf(", ");
      printf("%i", v[i]);
    }
    printf("}\n");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:42:02