1

在我的 C 程序中,我使用带有以下参数的 void 函数:一个 2D int 数组、一个用于创建新动态数组的 int 指针和一个 last int 指针,该指针将保存将在功能。所以动态数组是使用 malloc 在函数中创建的,一切正常,直到我在调用函数后在 main() 中打印它的元素。我得到的是垃圾而不是我应该看到的数字。这是功能代码:

void availableMoves(int array[][3], int *av, int *counter)
{
    int i, j;
    for (i=0; i<3; i++)
    {
        for (j=0; j<3; j++)
        {
            if (array[i][j] == E)
            {
                printf("%d ", 3*i + j + 1);
                (*counter)++;
            }
        }
    }
    av = (int *) malloc(*counter * sizeof(int));
    if (av == NULL)
    {
        printf("ERROR!");
    }
    else
    {
        for (i=0; i<*counter; i++)
            *(av + i) = 0;
        int pos = 0;
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                if (array[i][j] == E)
                {
                    *(av + pos++) = 3*i + j + 1;
                }
            }
        }
    }
}
4

2 回答 2

2

对动态数组使用双指针int **av而不是int *av

void availableMoves(int array[][3], int **av, int *counter)

av通过以下方式更改功能*av

于 2013-01-02T11:02:23.613 回答
2

在这个函数中,av是一个通过拷贝传递的指针。因此,当您在函数内更改指针的值时,不会修改原始指针。

有两种可能性:

  • 使用指向指针 ( int **av) 的指针;
  • 返回分配的指针 ( return av)。

所以要么:

void availableMoves(int array[][3], int **av, int *counter);

或者:

int *availableMoves(int array[][3], int *av, int *counter)

和电话:

availableMoves(array, &av, &counter);
av = availableMoves(array, av, &counter);
于 2013-01-02T11:05:06.967 回答