[英]Returning dynamic array through void function in C
在我的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;
}
}
}
}
}
對動態數組使用雙指針int **av
而不是int *av
void availableMoves(int array[][3], int **av, int *counter)
進入功能改變av
*av
在此函數中, 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.