将数组传递给函数时出现分段错误

In78

我试图使用合并排序来计算数组中的反转次数。但是在将数组传递给函数时出现分段错误。

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

long long countInversionsBetween(long a[], long p, long q, long r)
{
    long n1 = q - p + 1;
    long* lt = malloc((n1 + 1) * sizeof(*lt));
    long iii;
    for (iii = 0; iii < n1; iii += 1)
    {
        lt[iii] = a[p + iii];
    }
    long n2 = r - q;
    long* rt = malloc((n2 + 1) * sizeof(*rt));
    for (iii = 0; iii < n2; iii += 1)
    {
        rt[iii] = a[q + 1 + iii];
    }
    rt[n2] = lt[n1] = 100000000;
    long long nInversionsBetween = 0;
    iii = 0;
    long jjj = 0;
    long kkk;
    for (kkk = p; kkk <= r; kkk += 1)
    {
        if (lt[iii] <= rt[jjj])
        {
            a[kkk] = lt[iii];
            iii++;
        }
        else
        {
            a[kkk] = rt[jjj];
            jjj++;
            nInversionsBetween++;
        }
    }
    free(lt);
    free(rt);
    return nInversionsBetween;
}

long long countInversionsWithin(long a[], long p, long r)
{
    if (p < r)
    {
        long q = (p + r) / 2;
        long long nInversionWithinL = countInversionsWithin(a, p, q);
        long long nInversionWithinR = countInversionsWithin(a, q, r);
        long long nInversionsBetween = countInversionsBetween(a, p, q, r);
        return nInversionWithinL + nInversionWithinR + nInversionsBetween;
    }
    else
    {
        return 0;
    }
}

int main()
{
    long long t;
    scanf("%lld", &t);
    getchar();
    long long iii;
    for (iii = 0; iii < t; iii += 1)
    {
        getchar();
        long n;
        scanf("%ld", &n);
        long* a = malloc(n * sizeof(*a));
        long jjj;
        for (jjj = 0; jjj < n; jjj += 1)
        {
            scanf("%ld", &a[jjj]);
        }
        printf("%lld\n", countInversionsWithin(a, 0, n - 1));
        free(a);
    }
    return 0;
}

将数组a传递给main中的countInversionsWithin函数时,将发生分段错误。为什么会出现此细分错误?

您可能在这里遇到无限递归问题:

if (p < r)
    {
        long q = (p + r) / 2;
        long long nInversionWithinL = countInversionsWithin(a, p, q);
        long long nInversionWithinR = countInversionsWithin(a, q, r);

如果p = 0r = 1,q等于0并被countInversionsWithin(a, q, r)不确定地调用,直到堆栈爆炸并且您在尝试编写ro-page时遇到段错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将指针传递给函数时出现分段错误

将整数指针传递给函数时出现分段错误

将指针传递给函数时出现分段错误

将多维数组传递给C中的函数时的分段错误

将内部函数作为参数传递时出现分段错误

将 const 数组传递给泛型函数时出现打字稿错误

将数组传递给应填充它的函数时出现错误 13

将 ctypes 数组传递给 C 函数时出现 ArgumentError

将数组传递给setData()函数时出现问题

将变量传递给函数时出现500错误

将字符串数组传递给函数分段错误

将数组传递给函数会导致分段错误(核心已转储)

将char的2d向量传递给函数时的分段错误

尝试将值传递给函数时,会导致分段错误

将char数组传递给const char时,strptime引发分段错误*

将结构指针传递给函数的分段错误

将矩阵传递给函数后的分段错误

为什么将指针作为函数参数传递时出现分段错误?

将数组传递给函数错误?

为什么将char数组作为参数传递给函数并尝试在函数内部进行修改会显示分段错误?

在将数组传递给另一个函数后,为什么数组保留垃圾值/分段错误?

将空字符写入函数中的数组时出现分段错误

在函数中声明char数组时出现分段错误

为什么在将指针传递给函数后访问指向多维数组的指针会返回分段错误?

将新整数插入动态数组时出现分段错误

将int分配给数组时出现分段错误

将数据写入动态数组时出现分段错误

将多维数组传递给 C 中的函数时出现的问题

将字节数组传递给JNI函数时出现问题