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

