数组指针错误?

时间:2016-10-20 03:39:22

标签: c arrays pointers

我有一个带两个参数的函数;

  1. N是位置数或数组大小
  2. nr_vals我得到排列的数字范围;如果nr_vals是3,那么它打印的排列为0~3。
  3. 外部函数只打印基本案例{0 0 0 0},然后内部函数(extra_helper)以递归方式完成剩下的工作。

    我在第EXC_BAD_ACCESS行收到temp[N] = i错误。数组指针有错误吗?

    我的代码;

    外部功能;参数3,2。

    void perm_rec_1(int N, int nr_vals){
        int array[N];
        for(int i = 0; i<=nr_vals;i++)
        {
            array[i] = 0;
        }
        for (int i = 0; i <=nr_vals; i++)
        {
            printf("%d",array[i]);
        }
        printf("\n");
        extra_help(N, nr_vals, array[N]);
    }
    

    内在功能;

    void extra_help(int N, int nr_vals, int array[])
    {
        if (N < 0)
        {
            return;
        }
        int temp[N];
        for (int i = 0; i<=nr_vals; i++)
        {
            temp[i] = &array[i];
        }
        for (int i = 1; i <= nr_vals;i++)
        {
            temp[N] = i;
            for (int z = 0; z <=nr_vals; z++)
            {
                printf("%d",temp[z]);
            }
            printf("\n");
            while(temp[N+1] != NULL)
            {
                int M = N+1;
                for(int innerCounter = 1; innerCounter<=nr_vals; innerCounter++)
                {
                    temp[M] = innerCounter;
                    for (int z = 0; z <=nr_vals; z++)
                    {
                        printf("%d",temp[z]);
                    }
                }
                temp[M] = 0;
            }
        }
        extra_help(N-1, nr_vals, &array[N]);
    }
    

1 个答案:

答案 0 :(得分:0)

你的程序有很多问题:

  1. int array[N];,使用N声明哪个不是const来声明数组,不推荐使用,您可以声明为const int N=10; int array[N];int *array = (int*)malloc(N*sizeof(int))
  2. 当传递数组到函数时,它实际上传递了数组的地址,而你的array[N]是局部变量,当你将它传递给extra_help时,array[N]的内存已经消失了,它实际上传递了一个无效的地址
  3. 当声明temp[N]时,temp有N个元素,索引从0到N-1, 你不能使用temp [N]因为N索引不存在,尽管编译器不会总是生成警告或错误。