C - 数组参数指针错误



所以这个函数只是在数组之间进行交换。 r是数组i的长度,l是要更改的索引。它给了我一个错误EXC_BAD_ACCESS(Code=1).

void swap(int a[], int first, int second, int r) {
    int tempp = a[first];
    a[first] = a[second];
    a[second] = tempp;
}

此函数生成数组的排列。

void permute(int a[], int l, int r) {
    int temp[r];
    int i;
    if (l == r)
        for (int k = 0; k < r; k++) {
            printf("%dn", a[k]);
        }
    else {
        for (i = l; i <= r; i++) {
            swap(a[r], l, i, r);
            permute(a[r], l + 1, r);
            swap(a[r], l, i, r);
        }
    }
}

因此,函数从 main 接收输入并根据某些需求创建一个数组。

void perm_rec_1(int N, int nr_vals) {
    int a[N], temp = nr_vals - 1;
    int output[N];
    for (int i = 0; i < N; i++) {
        if (i >= nr_vals) {
            a[i] = temp;
            continue;
        } else {
            a[i] = i;
        }
    }
    int i;
    for (int i = 0; i < N; i++) {
        printf("%d", a[i]);
    }
    permute(a[N], 0, (nr_vals) - 1);
}

处理代码中的各种类型错误,将编译并运行以下内容:

void swap(int a[], int first, int second) {
    int temporary = a[first];
    a[first] = a[second];
    a[second] = temporary;
}
void permute(int a[], int l, int r) {
    if (l == r) {
        for (int k = 0; k < r; k++) {
            printf("%dn", a[k]);
        }
    } else {
        for (int i = l; i <= r; i++) {
            swap(a, l, i);
            permute(a, l + 1, r);
            swap(a, l, i);
        }
    }
}
void perm_rec_1(int N, int nr_vals) {
    int a[N], temp = nr_vals - 1;
    for (int i = 0; i < N; i++) {
        if (i >= nr_vals) {
            a[i] = temp;
        } else {
            a[i] = i;
        }
    }
    for (int i = 0; i < N; i++) {
        printf("%d", a[i]);
    }
    permute(a, 0, (nr_vals) - 1);
}

虽然我不能说除了swap()工作之外的任何内容,因为我不确定它试图做什么。

最新更新