m0_67552620 2022-05-16 22:34 采纳率: 0%
浏览 219
已结题

Segmentation fault : 段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域


#include<iostream>
using namespace std;
const int MAXN = 10000;
int arr_hero[MAXN];
int arr_magic[MAXN];
#include<algorithm>
bool cmp(int x, int y) {
    return x < y;
}
int main() {
    int n, m;
    cin >> n;
    int temp;
    int total = 0;
    int i;
    for (i = 0; i<n; i++)
    {
        cin >> temp;
        arr_hero[i] = temp;
        total += temp;
    }
    std::sort(arr_hero, arr_hero + n, cmp);
    cin >> m;
    int hero_max = arr_hero[n-1];
    int dragon_attack, dragon_defense;
    int magicwater;

    for (int i = 0; i < m; i++)
    {
        magicwater = 0;
        cin >> dragon_defense >> dragon_attack;
        if (dragon_defense > hero_max) {
            magicwater += (dragon_defense - hero_max);
            arr_magic[i] = magicwater;

            if (dragon_attack > total - hero_max) {
                magicwater += dragon_attack - (total - hero_max);
                arr_magic[i] = magicwater;
            }
        }
        else {
            int begin = 0, end = n - 1, mid{};
            while (begin <= end)
            {
                mid = (begin + end) / 2;
                if (arr_hero[mid] == dragon_defense) {
                    break;
                }
                else if (arr_hero[mid] > dragon_defense) {
                    end = mid - 1;
                }
                else {
                    begin = begin + 1;
                }
            }
            int attack_hero = arr_hero[mid];
            if (attack_hero > dragon_defense) {
                if (mid - 1 >= 0) {
                    int dx_left = dragon_defense - arr_hero[mid - 1];
                    int dx_right = attack_hero - dragon_defense;
                    if (dx_left < dx_right) {
                        attack_hero = arr_hero[mid - 1];
                    }
                }
            }
            else if (attack_hero < dragon_defense) {
                if (mid + 1 < n) {
                    int dx_left = dragon_defense - attack_hero;
                    int dx_right = arr_hero[mid + 1] - dragon_defense;
                    if (dx_right < dx_left) {
                        attack_hero = arr_hero[mid + 1];
                    }
                }
            }
            if (dragon_defense >= attack_hero) {
                magicwater += (dragon_defense - attack_hero);
                arr_magic[i] = magicwater;
                if (dragon_attack > total - attack_hero) {
                    magicwater += dragon_attack - (total - attack_hero);
                    arr_magic[i] = magicwater;
                }
            }
            else {
                if (dragon_attack > total - attack_hero) {
                    magicwater += dragon_attack - (total - attack_hero);
                    arr_magic[i] = magicwater;
                }
            }
        }
    }
    for (i = 0; i < m; i++)
    {
        cout << arr_magic[i] << endl;
    }
    system("pause");
    return 0;
}

上述代码出现段错误,在oj平台运行不了,但是我能在vs上运行出来

img

img

  • 写回答

3条回答 默认 最新

  • 吕布辕门 后端领域新星创作者 2022-05-16 22:47
    关注

    把我打圈的去掉

    img

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月18日
  • 修改了问题 5月17日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置