数组参数指针错误?

时间:2016-03-13 00:40:55

标签: c arrays

所以这个函数只是在数组之间进行交换。 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("%d\n", 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);
}

1 个答案:

答案 0 :(得分:0)

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

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("%d\n", 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()以外的任何内容,但我不确定它会尝试做什么。