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

数组去重代码出现EXC_BAD_ACCESS错误求助(Code=1, address=0x30000008)

解决C语言数组去重时的EXC_BAD_ACCESS错误

核心错误原因

你触发EXC_BAD_ACCESS的直接原因是内层循环的增量写错了:
内层循环for (j = 0; j < 10; i++)里,循环增量应该是j++,但你写成了i++。这会导致i在每次内层循环时被疯狂递增,很快超过数组A的最大下标10(A长度为11,下标范围0-10),访问A[i]时越界访问了不属于数组的内存,直接触发内存访问错误。

其他需要修复的问题

除了这个致命错误,代码里还有几个潜在问题:

  1. 浮点数直接判等不严谨:用A[i]==B[j]比较double类型值存在风险,浮点数存储和计算时会有精度误差,应该用差值的绝对值小于极小值判断,比如fabs(A[i] - B[j]) < 1e-6。
  2. 数组前移时越界:for (c = j; c < 10; c++)中,当c=9时,c+1=10已经超出B数组的下标范围(B长度10,下标0-9),循环条件要改成c < 9。
  3. 输出变量错误:最后输出新数组时,你用了B[c],但c是上一次循环的残留值,应该用循环变量B[j]。

修复后的完整代码

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand(time(NULL));
    int i, j, c;
    double A[11];
    double B[10];
    
    // 生成数组A
    for (i = 0; i < 11; i++)
    { 
        A[i] = rand() % 100;
    } 
    
    // 生成数组B
    for (j = 0; j < 10; j++)
    {
        B[j] = rand() % 100;
    }

    // 打印原数组
    printf("Array A[N]: \n");
    for (i = 0; i < 11; i++) // 修复:原代码仅打印前10个元素,现在打印全部11个
    {
        printf("%.2lf  ", A[i]);
    }
    printf("\n Array B[M]: \n");
    for (j = 0; j < 10; j++)
    {
        printf("%.2lf  ", B[j]);
    }

    // 移除B中与A重复的元素
    for (i = 0; i < 11; i++)
    {
        for (j = 0; j < 10; j++) // 修复:把i++改成j++
        {
            // 修复:用浮点数安全比较方式
            if (fabs(A[i] - B[j]) < 1e-6)
            {
                // 修复:循环条件改成c < 9,避免访问B[10]
                for (c = j; c < 9; c++)
                {
                    B[c] = B[c+1];
                }
                // 移除元素后回退j,避免跳过下一个元素
                j--;
            }
        }
    }

    // 打印去重后的数组B
    printf("\n New array B[M]: \n");
    for (j = 0; j < 9; j++)
    {
        printf("%.2lf  ", B[j]); // 修复:用B[j]代替B[c]
    }
    
    return 0;
}

额外说明

原代码打印数组A时仅循环10次,漏掉了第11个元素,修复时一并修正。另外,当前代码处理后B的有效长度固定按9输出,如果有多个重复元素,有效长度会更小,建议用变量跟踪B的当前有效长度,输出时更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:56:02