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 回答