sort函数中有关 将一个无效参数传递给了将无效参数视为严重错误的函数


//第1行给出评估的道路条数 N、村庄数目M(< 100);随后的 N

#include<iostream>
#include<algorithm>
using namespace std;
int f[101];
int  find1(int x) {
    int t = x;
    while (f[t] != t) { t = f[t]; }
    return t;
}
struct road{
    int a = 0, b = 0, distance = 0;
};

bool cmp(road x, road y) {
    return x.distance < y.distance;
}
void merge2(int fa,int fb) {
     f[fa] = fb;
}
int main() {
    int N = 0, M = 0;
    bool flag=1;
    while (cin >> N >> M){
        if (N == 0)break;
        if (N < M - 1) { flag = 0; break; }
        road *r = new road [N+1];
        int count = 0;
        while (N--) { count++;
        cin >> r[count].a >> r[count].b >> r[count].distance;
         }
        for (int i = 1; i <= M; i++) {
            f[i] = i;
        }
        sort((r + 1), (r + N + 1), cmp);
        int sum = 0,ans=0;
        for (int i = 1; i <= N; i++) {
            int fa = find1(r[i].a);
            int fb = find1(r[i].b);
            if (fa == fb)  continue;
            merge2(fa,fb);
            ans++;
            sum += r[i].distance;
        }
        delete [] r;
        if (ans == M - 1)flag = 1;
        else flag = 0;
        if (flag) { cout << sum << endl; }
        else { cout << "?" << endl; }
    }
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/691942778246150.png "#left")

问题相关代码,请勿粘贴截图
运行结果及报错内容

img

img

我的解答思路和尝试过的方法

在上一个代码中也用了sort函数 其中也是用了动态数组,也是sort(r+1,r+(一个输入的变量)M+1,cmp)但是那个代码就没有报错,但是这里的运行的时候报错了(1、这是为什么)然后说触发了断点,转到了2、截图中的注释,那个看不懂,有解释一下吗。

我想要达到的结果

1、为什么运行的时候报错了
2、截图中的注释,那个看不懂,可以麻烦解释一下吗(或者说指点一下哪里有相关的文章博客之类的)。