0

関数内で配列を再割り当てしようとしています。

unsigned findShlasa(int matrix[COL_MATRIX_A][ROW_MATRIX_A], Sa *ar, list head)
{
Node* current_pos;
unsigned count = 0;
unsigned row_index, col_index;


for (col_index = 0; col_index < COL_MATRIX_A; col_index++)
{
    for (row_index = 0; row_index < ROW_MATRIX_A; row_index++)
    {
        if ((row_index + col_index) == matrix[col_index][row_index])
        {
            if (!head)
            {
                ar = (Sa*) malloc(sizeof(Shlasha));
                head = (list) malloc(sizeof(list));
                current_pos = head;
                count++;
            }
            else
            {
                count++;
                ar = (Sa*) realloc(ar, count * sizeof(Shlasha));
                current_pos->next = (Node*) malloc(sizeof(Node));
            }
.....

この関数の外で配列を印刷しようとすると、ar がメモリ内の別の場所を指すようになったため、機能しません。関数内で再割り当てし、関数外の同じ場所を指すにはどうすればよいですか?

PS: Sa* は構造体へのポインタです

4

2 に答える 2

3

アドレス自体を変更できるようにするには、ダブルポインターとして渡します。

..., Sa **ar, list head)

その後

*ar = (Sa*) realloc(*ar, count * sizeof(Shlasha));
于 2011-08-21T13:55:40.397 に答える
2

それは単一のポインターであるため、配列の関数のローカルコピーを変更しているだけです。渡すことができる配列の外にそれを返すにSa **arは、関数に渡しているポインターのアドレスを取得し、次に、関数内ar*ar.

Sa **arrayコードの変更を避けたい場合は、次のようなものを渡してからローカル変数に割り当てることもできます。

Sa *ar = *array;

その後、あなたはまだ使用することができます

ar = (Sa*) malloc(sizeof(Shlasha));

次に、関数の最後で、戻る前に次のことを行います。

*array = ar;
于 2011-08-21T13:57:43.937 に答える