我尝试在函数内重新分配数组。
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现在指向内存中的其他位置。 如何在函数内重新分配它并仍指向函数外的相同位置?
P.S: Sa *是struct
的指针答案 0 :(得分:3)
将其作为双指针传递,以便能够修改地址本身:
..., Sa **ar, list head)
然后
*ar = (Sa*) realloc(*ar, count * sizeof(Shlasha));
答案 1 :(得分:2)
您只是修改函数的数组本地副本,因为它是一个单指针。要将它返回到数组之外,您可以传递Sa **ar
,然后获取要传递给函数的指针的地址,然后,在您的函数中,ar
将其更改为{{ 1}}。
如果你想避免更改代码,你也可以传递类似*ar
的内容然后分配给局部变量,所以
Sa **array
然后你仍然可以使用
Sa *ar = *array;
然后在函数结束之前返回do:
ar = (Sa*) malloc(sizeof(Shlasha));