在我的C程序中,我使用带有以下参数的void函数: 一个2D int数组,一个用于创建新动态数组的int指针和一个最后一个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;
}
}
}
}
}
答案 0 :(得分:2)
为动态数组int **av
而不是int *av
void availableMoves(int array[][3], int **av, int *counter)
并按av
*av
答案 1 :(得分: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);