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

编写数组排序函数无法修改数组值,调用出现code=3221225477错误

问题分析与修复

错误原因

返回码3221225477是Windows系统下的内存访问违规错误,根源是参数类型不匹配和指针操作逻辑错误:

  1. 参数类型不兼容:Sort函数声明的第一个参数是int **arr(二级指针,指向int指针的指针),但main中传入的&arr是int (*)[10](指向包含10个int的数组的指针),两种类型完全不同,编译器会发出警告,运行时会导致指针偏移计算错误。
  2. 指针访问逻辑错误:函数内部用arr[i]访问元素时,会按照二级指针的规则计算偏移(每次偏移sizeof(int*)字节),但实际传入的是数组指针,偏移逻辑完全错误,直接访问了非法内存区域。

修复方案

方案1:修改Sort函数为普通数组排序(推荐)

把函数参数改为一维指针(数组传参会自动退化为指针),直接操作数组元素即可,这是C语言中排序数组的常规写法:

#include <stdio.h>

void Sort(int *arr, int len)
{
    int ech = 1;
    while (ech != 0)
    {
        ech = 0;
        for (int i = 0; i < len - 1; i++)
        {
            if (arr[i] > arr[i + 1])
            {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
                ech++;
            }
        }
    }
}

int main()
{
    int arr[10] = {100, 30, 100, 17, 11, 12, 7, 18, 200, 25};
    Sort(arr, 10);
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

方案2:保留二级指针(仅作演示,无必要)

如果非要用二级指针,需要先构建一个指向数组每个元素的指针数组,再传入Sort函数:

#include <stdio.h>

void Sort(int **arr, int len)
{
    int ech = 1;
    while (ech != 0)
    {
        ech = 0;
        for (int i = 0; i < len - 1; i++)
        {
            if (*(arr[i]) > *(arr[i + 1]))
            {
                int temp = *(arr[i]);
                *(arr[i]) = *(arr[i + 1]);
                *(arr[i + 1]) = temp;
                ech++;
            }
        }
    }
}

int main()
{
    int arr[10] = {100, 30, 100, 17, 11, 12, 7, 18, 200, 25};
    // 构建指针数组,每个元素指向arr的对应元素
    int *ptr_arr[10];
    for (int i = 0; i < 10; i++) {
        ptr_arr[i] = &arr[i];
    }
    Sort(ptr_arr, 10);
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

关键说明

  • 普通数组排序不需要二级指针,直接使用一维指针即可,代码更简洁高效。
  • 指针类型匹配是C语言中必须严格遵守的规则,类型不匹配会导致未定义行为,运行时崩溃是常见结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:33:16